a transition (noun) Transition action to execute if a condition is fulfilled (verb) WORKFLOW NET’ state 1 state 2 transition Place input/output of a transition contains x tokens Transition action to fire to go from a place to another (verb) Marking / Tokens representation of the position of all tokens over the network. place a transition1 transition 2 transition 3 place b place s place e place d transition4 place f transition1 place a
2/2 place 1 transition a place 2 transition c place 4 transition b place 3 transition d place 1 transition a place 2 transition c place 6 place 3 transition d place 4 transition e place 5
e-commerce application with Symfony You are in charge of implementing the cart checkout You need to make sure that a product goes through a very precise process through the cart checkout
stock 2. The customer puts the product in a cart 3. Then 2 options • either the customer puts the product in a wishlist, that way, a friend can pay the cart • either the customer is ready to pay the product 4. Then customer pays and that’s it!
a paper and draw the workflow of your dreams Step 2: Declare your workflow Step 3: Dump it to check if everything’s ok Step 4: Write some code to deal with the process and display things
object $subject A subject * * @return Marking The Marking * * @throws LogicException */ public function getMarking($subject) { // … } Also sets the initial marking.
* * @param object $subject A subject * @param string $transitionName A transition * * @return bool true if the transition is enabled * * @throws LogicException If the transition does not exist */ public function can($subject, $transitionName) { //… } /** * @Route("/product/{id}", name="show_product") */ public function showAction(Product $product) { dump($this->get('workflow.product')->can($product, 'put_in_cart')); //… }
* * @param object $subject A subject * @param string $transitionName A transition * * @return bool true if the transition is enabled * * @throws LogicException If the transition does not exist */ public function can($subject, $transitionName) { //… } /** * @Route("/product/{id}", name="show_product") */ public function showAction(Product $product) { dump($this->get('workflow.product')->can($product, 'put_in_cart')); //… } True False or according to the current marking
$subject A subject * @param string $transitionName A transition * * @return Marking The new Marking * * @throws LogicException If the transition is not applicable * @throws LogicException If the transition does not exist */ public function apply($subject, $transitionName) { //… }
3/4 The current marking {{ product.marking|keys|join(', ')|default('[]')|raw }} Available transitions {% for transition in workflow_transitions(product) %} {{ dump(transition) }} {% else %} No more transition available for the product object. {% endfor %}