From 3d14ed90463d22383f323ab0499b9482de8500a7 Mon Sep 17 00:00:00 2001 From: Matthias Schmidt Date: Mon, 30 Jun 2025 19:52:36 +0200 Subject: [PATCH] [Workflow] Remove deprecated `Event::getWorkflow()` --- UPGRADE-8.0.md | 72 +++++++++++++++++++ src/Symfony/Component/Workflow/CHANGELOG.md | 72 +++++++++++++++++++ .../Component/Workflow/Event/Event.php | 10 --- src/Symfony/Component/Workflow/composer.json | 3 +- 4 files changed, 145 insertions(+), 12 deletions(-) diff --git a/UPGRADE-8.0.md b/UPGRADE-8.0.md index 0cc7a51882305..287718ee57be5 100644 --- a/UPGRADE-8.0.md +++ b/UPGRADE-8.0.md @@ -493,6 +493,78 @@ VarExporter * Remove `LazyGhostTrait` and `LazyProxyTrait`, use native lazy objects instead * Remove `ProxyHelper::generateLazyGhost()`, use native lazy objects instead +Workflow +-------- + + * Remove `Event::getWorkflow()` method + + *Before* + ```php + use Symfony\Component\Workflow\Attribute\AsCompletedListener; + use Symfony\Component\Workflow\Event\CompletedEvent; + + class MyListener + { + #[AsCompletedListener('my_workflow', 'to_state2')] + public function terminateOrder(CompletedEvent $event): void + { + $subject = $event->getSubject(); + if ($event->getWorkflow()->can($subject, 'to_state3')) { + $event->getWorkflow()->apply($subject, 'to_state3'); + } + } + } + ``` + + *After* + ```php + use Symfony\Component\DependencyInjection\Attribute\Target; + use Symfony\Component\Workflow\Attribute\AsCompletedListener; + use Symfony\Component\Workflow\Event\CompletedEvent; + use Symfony\Component\Workflow\WorkflowInterface; + + class MyListener + { + public function __construct( + #[Target('my_workflow')] + private readonly WorkflowInterface $workflow, + ) { + } + + #[AsCompletedListener('my_workflow', 'to_state2')] + public function terminateOrder(CompletedEvent $event): void + { + $subject = $event->getSubject(); + if ($this->workflow->can($subject, 'to_state3')) { + $this->workflow->apply($subject, 'to_state3'); + } + } + } + ``` + + *Or* + ```php + use Symfony\Component\DependencyInjection\ServiceLocator; + use Symfony\Component\DependencyInjection\Attribute\AutowireLocator; + use Symfony\Component\Workflow\Attribute\AsTransitionListener; + use Symfony\Component\Workflow\Event\TransitionEvent; + + class GenericListener + { + public function __construct( + #[AutowireLocator('workflow', 'name')] + private ServiceLocator $workflows + ) { + } + + #[AsTransitionListener] + public function doSomething(TransitionEvent $event): void + { + $workflow = $this->workflows->get($event->getWorkflowName()); + } + } + ``` + Yaml ---- diff --git a/src/Symfony/Component/Workflow/CHANGELOG.md b/src/Symfony/Component/Workflow/CHANGELOG.md index 5a37eadfc892d..b6e1777ae32e7 100644 --- a/src/Symfony/Component/Workflow/CHANGELOG.md +++ b/src/Symfony/Component/Workflow/CHANGELOG.md @@ -1,6 +1,78 @@ CHANGELOG ========= +8.0 +--- + + * Remove `Event::getWorkflow()` method + + *Before* + ```php + use Symfony\Component\Workflow\Attribute\AsCompletedListener; + use Symfony\Component\Workflow\Event\CompletedEvent; + + class MyListener + { + #[AsCompletedListener('my_workflow', 'to_state2')] + public function terminateOrder(CompletedEvent $event): void + { + $subject = $event->getSubject(); + if ($event->getWorkflow()->can($subject, 'to_state3')) { + $event->getWorkflow()->apply($subject, 'to_state3'); + } + } + } + ``` + + *After* + ```php + use Symfony\Component\DependencyInjection\Attribute\Target; + use Symfony\Component\Workflow\Attribute\AsCompletedListener; + use Symfony\Component\Workflow\Event\CompletedEvent; + use Symfony\Component\Workflow\WorkflowInterface; + + class MyListener + { + public function __construct( + #[Target('my_workflow')] + private readonly WorkflowInterface $workflow, + ) { + } + + #[AsCompletedListener('my_workflow', 'to_state2')] + public function terminateOrder(CompletedEvent $event): void + { + $subject = $event->getSubject(); + if ($this->workflow->can($subject, 'to_state3')) { + $this->workflow->apply($subject, 'to_state3'); + } + } + } + ``` + + *Or* + ```php + use Symfony\Component\DependencyInjection\ServiceLocator; + use Symfony\Component\DependencyInjection\Attribute\AutowireLocator; + use Symfony\Component\Workflow\Attribute\AsTransitionListener; + use Symfony\Component\Workflow\Event\TransitionEvent; + + class GenericListener + { + public function __construct( + #[AutowireLocator('workflow', 'name')] + private ServiceLocator $workflows + ) { + } + + #[AsTransitionListener] + public function doSomething(TransitionEvent $event): void + { + $workflow = $this->workflows->get($event->getWorkflowName()); + } + } + ``` + 7.3 --- diff --git a/src/Symfony/Component/Workflow/Event/Event.php b/src/Symfony/Component/Workflow/Event/Event.php index c13818b93c115..3550246845549 100644 --- a/src/Symfony/Component/Workflow/Event/Event.php +++ b/src/Symfony/Component/Workflow/Event/Event.php @@ -46,16 +46,6 @@ public function getTransition(): ?Transition return $this->transition; } - /** - * @deprecated since Symfony 7.3, inject the workflow in the constructor where you need it - */ - public function getWorkflow(): WorkflowInterface - { - trigger_deprecation('symfony/workflow', '7.3', 'The "%s()" method is deprecated, inject the workflow in the constructor where you need it.', __METHOD__); - - return $this->workflow; - } - public function getWorkflowName(): string { return $this->workflow->getName(); diff --git a/src/Symfony/Component/Workflow/composer.json b/src/Symfony/Component/Workflow/composer.json index 6de650665bb71..e10e995dc4c38 100644 --- a/src/Symfony/Component/Workflow/composer.json +++ b/src/Symfony/Component/Workflow/composer.json @@ -20,8 +20,7 @@ } ], "require": { - "php": ">=8.4", - "symfony/deprecation-contracts": "2.5|^3" + "php": ">=8.4" }, "require-dev": { "psr/log": "^1|^2|^3",