src/EventSubscriber/LeaveCancelViaRequestGuardSubscriber.php line 12
<?phpnamespace App\EventSubscriber;use App\Entity\Leave;use App\Enum\LeaveCancellationRequestStatus;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\Workflow\Event\GuardEvent;class LeaveCancelViaRequestGuardSubscriber implements EventSubscriberInterface{public function guardCancelViaRequest(GuardEvent $event): void{/** @var Leave $leave */$leave = $event->getSubject();$cancellationRequest = $leave->getLeaveCancellationRequest();$alreadyHasACancellationRequest = null !== $cancellationRequest;if (!$alreadyHasACancellationRequest) {$event->setBlocked(true, 'No cancellation request exists.');} else {$cancellationRequestIsAccepted =LeaveCancellationRequestStatus::ACCEPTED->value === $cancellationRequest->getStatus();if (!$cancellationRequestIsAccepted) {$event->setBlocked(true, 'The cancellation request is not accepted.');}}}public static function getSubscribedEvents(): array{$workflowName = 'leave';$transitionName = 'cancel_via_request';return ['workflow.' . $workflowName . '.guard.' . $transitionName => ['guardCancelViaRequest'],];}}