Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Logika biznesowa w aplikacjach web - Symfony wo...
Search
Dominik
March 16, 2017
Programming
0
290
Logika biznesowa w aplikacjach web - Symfony workflow
Business application management using Symfony Workflow
Slides from phpers Rzeszów
http://phpers.pl
Dominik
March 16, 2017
Tweet
Share
Other Decks in Programming
See All in Programming
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
140
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
Fluid Templating in TYPO3 14
s2b
0
130
CSC307 Lecture 04
javiergs
PRO
0
660
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
480
AtCoder Conference 2025
shindannin
0
1.1k
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.5k
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
630
CSC307 Lecture 08
javiergs
PRO
0
670
AgentCoreとHuman in the Loop
har1101
5
250
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Utilizing Notion as your number one productivity tool
mfonobong
3
220
Site-Speed That Sticks
csswizardry
13
1.1k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
650
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
130
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The browser strikes back
jonoalderson
0
420
How to Talk to Developers About Accessibility
jct
2
140
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Transcript
LOGIKA BIZNESOWA APLIKACJI WEB SYMFONY WORKFLOW COMPONENT Dominik Hajduk
None
DOMINIK HAJDUK PHP developer Twitter: @DominikHaj
SKĄD CZERPIEMY INFORMACJE O PROCESACH I LOGICE BIZNESOWEJ APLIKACJI?
DOKUMENTACJA KLIENT KOMENTARZE W KODZIE SCENARIUSZE TESTOWE
JAKIE PRZYNOSI TO EFEKTY?
NIEAKTUALNA, ODERWANA OD PROJEKTU DOKUMENTACJA ROZSIANA PO KODZIE LOGIKA ROZBIEŻNOŚCI
$status;
$status = $a->getStatus(); if(is_array($status)){ $this->doSth(); } if($status > 3 &&
$a->deleted() == false){ $this->doOther(); } if($status > 5 || $status != false) { $this->wtf_this_status_is(); //?!? }
// set status 2 to mark as deleted // http://documentation.com?id=986875
$status = 1; // not sure why but for 2 not works // link to doc not working!!!
/** * set tutorial * * rules: * 1. start
only for not UK users * 2. publishers only * 3. just if active tutorial * 4. set only if not finished already * ... * 99. display also if forced !! */ public function tutorialAction() { }
/** * When I wrote this, only God and *
I understood what I was doing * * Now, God only knows * * * Magic. Do not touch. */ function parse_magic($sth, $sth2) {
CZY MOŻNA COŚ Z TYM ZROBIĆ?
A MUERTE
AUTOMAT SKONCZONY (ANG. FINITE STATE MACHINE)
None
None
None
None
SYMFONY WORKFLOW COMPONENT Symfony 3.2
Grégoire Pineau
MASZYNA STANU CZY WORKFLOW?
MASZYNA STANU Nie może być w więcej niż jednym miejscu
w tym samym momencie Może mieć ścieżki cykliczne
WORKFLOW Może być w więcej niż jednym miejscu w tym
samym momencie Zwykle nie ma ścieżek cyklicznych
POKAŻ KOD!
use Symfony\Component\Workflow \DefinitionBuilder; use Symfony\Component\Workflow \Transition; use Symfony\Component\Workflow \Workflow; use
Symfony\Component\Workflow \MarkingStore \SingleStateMarkingStore;
$builder = new DefinitionBuilder(); $builder->addPlaces( [ 'initial', 'booked', 'payed', 'done',
] ); $builder->addTransition( new Transition( 'pay', 'booked', 'payed' ) ); $builder->addTransition ...
$definition = $builder->build(); $marking = new SingleStateMarkingStore( 'currentState' ); $workflow
= new Workflow( $definition, $marking );
use Symfony\Component\Workflow\Registry; use Acme\Entity\Booking; $registry = new Registry(); $registry->add( $bookingWorkflow,
Booking::class ); $registry->add( $newsletterWorkflow, Newsletter::class );
$booking = new Booking(); $workflow = $registry->get($booking); // False $workflow->can($booking,
'pay'); // True $workflow->can($booking, 'book'); $workflow->apply($booking, 'book'); $workflow->can($booking, 'pay');
$workflow->getEnabledTransitions( $booking ); // ['pay']
UŻYCIE W SYMFONY
workflows: blog_publishing: type: 'workflow' # or 'state_machine' marking_store: type: 'multiple_state'
# or 'single_state'
blog_publishing: ... supports: - AppBundle\Entity\BlogPost places: - draft - review
- rejected - published
blog_publishing: ... transitions: to_review: from: draft to: review publish: from:
review to: published
$post = new \AppBundle\Entity\Blog(); $workflow = $this->container->get( 'workflow.blog_publishing' ); $workflow->can($post,
'publish');
try { $workflow->apply( $post, 'to_review' ); } catch (LogicException $e)
{ // ... } $transitions = $workflow ->getEnabledTransitions($post);
<h3>Twig</h3> {% if workflow_can(post, 'publish') %} <a href="...">Publish article</a> {%
endif %}
<h3>Twig cd..</h3> {% for transition in workflow_transitions(post) %} <a href="...">{{
transition.name }}</ {% else %} No actions available. {% endfor %}
UŻYWA ZDARZENIA guard logowanie
JAK TO ZADZIAŁAŁO?
1. POBRANIE OBIEKTU (STANU) 2. ZWRÓCENIE MOŻLIWYCH AKCJI
1. POBRANIE OBIEKTU (STANU) 2. SPRAWDZENIE CZY TRANZYCJA MOŻLIWA 3.
AKCJA NA OBIEKCIE (SERWIS) 4. WYKONANIE TRANZYCJI
None
JAK PRZYGOTOWAĆ DOKUMENTACJE?
Graphviz.org // dump-graph.php $dumper = new GraphvizDumper(); echo $dumper->dump($definition); php
dump-graph.php > out.dot dot -Tpng out.dot -o graph.png
bin/console workflow:dump name > out.dot dot -Tpng out.dot -o graph.png
None
None
CZY ROZWIĄŻE PROBLEMY?
DOKUMENTACJA JEST W KONFIGACH (YAML, XML, PHP)
MOŻNA SZYBKO WYGENEROWAĆ GRAFY
LOGIKA ZAMKNIĘTA W KOMPONENCIE
TESTOWALNE? PEWNIE!
ZACIEKAWIŁO? symfony.com/doc/current/workflow.html lyrixx/SFLive-Paris2016-Workflow
PYTANIA?
DZIĘKI!
UWAGI @DominikHaj
ŻRÓDŁA: symfony.com/doc/current/workflow.html symfony.com/doc/current/workflow/state- machines.html symfony.com/doc/current/workflow/usage.html symfony.com/doc/current/workflow/dumping- workflows.html