@@ -813,6 +813,98 @@ place::
813
813
}
814
814
}
815
815
816
+ Creating Your Own Marking Store
817
+ -------------------------------
818
+
819
+ You may need to implement your own store to execute some additional logic
820
+ when the marking is updated. For example, you may have some specific needs
821
+ to store the marking on certain workflows. To do this, you need to implement
822
+ the
823
+ :class: `Symfony\\ Component\\ Workflow\\ MarkingStore\\ MarkingStoreInterface `::
824
+
825
+ namespace App\Workflow\MarkingStore;
826
+
827
+ use Symfony\Component\Workflow\Marking;
828
+ use Symfony\Component\Workflow\MarkingStore\MarkingStoreInterface;
829
+
830
+ class ReflectionMarkingStore implements MarkingStoreInterface
831
+ {
832
+ /**
833
+ * @var string
834
+ */
835
+ private $property;
836
+
837
+ public function __construct(string $property = 'property')
838
+ {
839
+ $this->property = $property;
840
+ }
841
+
842
+ public function getMarking(object $subject): Marking
843
+ {
844
+ $r = new \ReflectionObject($subject);
845
+ $property = $r->getProperty($this->property);
846
+
847
+ return new Marking([$property->getValue($subject) => 1]);
848
+ }
849
+
850
+ public function setMarking(object $subject, Marking $marking): void
851
+ {
852
+ $r = new \ReflectionObject($subject);
853
+ $property = $r->getProperty($this->property);
854
+
855
+ $property->setValue($subject, $marking);
856
+ }
857
+ }
858
+
859
+ Once your marking store is implemented, you can configure your workflow to use
860
+ it:
861
+
862
+ .. configuration-block ::
863
+
864
+ .. code-block :: yaml
865
+
866
+ # config/packages/workflow.yaml
867
+ framework :
868
+ workflows :
869
+ blog_publishing :
870
+ # ...
871
+ marking_store :
872
+ service : ' App\Workflow\MarkingStore\ReflectionMarkingStore'
873
+
874
+ .. code-block :: xml
875
+
876
+ <!-- config/packages/workflow.xml -->
877
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
878
+ <container xmlns =" http://symfony.com/schema/dic/services"
879
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
880
+ xmlns : framework =" http://symfony.com/schema/dic/symfony"
881
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
882
+ http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"
883
+ >
884
+ <framework : config >
885
+ <framework : workflow name =" blog_publishing" >
886
+ <!-- ... -->
887
+ <framework : marking-store service =" App\Workflow\MarkingStore\ReflectionMarkingStore" />
888
+ </framework : workflow >
889
+ </framework : config >
890
+ </container >
891
+
892
+ .. code-block :: php
893
+
894
+ // config/packages/workflow.php
895
+ use App\Workflow\MarkingStore\ReflectionMarkingStore;
896
+ use Symfony\Config\FrameworkConfig;
897
+
898
+ return static function (FrameworkConfig $framework): void {
899
+ // ...
900
+
901
+ $blogPublishing = $framework->workflows()->workflows('blog_publishing');
902
+ // ...
903
+
904
+ $blogPublishing->markingStore()
905
+ ->service(ReflectionMarkingStore::class);
906
+ };
907
+
816
908
Usage in Twig
817
909
-------------
818
910
0 commit comments