src/EventListener/Workflow/Task/QrCode/QrCodeUseUpListener.php line 35

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: takabayashi
  5.  * Date: 2019/09/19
  6.  * Time: 21:18
  7.  */
  8. declare(strict_types=1);
  9. namespace App\EventListener\Workflow\Task\QrCode;
  10. use App\Entity\QrCode;
  11. use App\Service\QrCode\UsedUpChecker\UsedUpCheckerResolverInterface;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Workflow\Event\GuardEvent;
  14. use Symfony\Component\Workflow\TransitionBlocker;
  15. class QrCodeUseUpListener implements EventSubscriberInterface
  16. {
  17.     /**
  18.      * @var UsedUpCheckerResolverInterface
  19.      */
  20.     private $usedUpCheckerResolver;
  21.     /**
  22.      * QrCodeUseUpListener constructor.
  23.      * @param UsedUpCheckerResolverInterface $usedUpCheckerResolver
  24.      */
  25.     public function __construct(UsedUpCheckerResolverInterface $usedUpCheckerResolver)
  26.     {
  27.         $this->usedUpCheckerResolver $usedUpCheckerResolver;
  28.     }
  29.     public function guardUseUp(GuardEvent $event): void
  30.     {
  31.         $qrCode $event->getSubject();
  32.         if (!$qrCode instanceof QrCode) {
  33.             throw new \LogicException('subject must be 'QrCode::class);
  34.         }
  35.         if (!$this->usedUpCheckerResolver->resolve($qrCode)->isUsedUp($qrCode)) {
  36.             $event->addTransitionBlocker(new TransitionBlocker('まだQrCodeを使い切っていません。''0'));
  37.         }
  38.     }
  39.     /**
  40.      * Returns an array of event names this subscriber wants to listen to.
  41.      *
  42.      * The array keys are event names and the value can be:
  43.      *
  44.      *  * The method name to call (priority defaults to 0)
  45.      *  * An array composed of the method name to call and the priority
  46.      *  * An array of arrays composed of the method names to call and respective
  47.      *    priorities, or 0 if unset
  48.      *
  49.      * For instance:
  50.      *
  51.      *  * ['eventName' => 'methodName']
  52.      *  * ['eventName' => ['methodName', $priority]]
  53.      *  * ['eventName' => [['methodName1', $priority], ['methodName2']]]
  54.      *
  55.      * @return array The event names to listen to
  56.      */
  57.     public static function getSubscribedEvents()
  58.     {
  59.         return [
  60.             'workflow.qrcode_states.guard.use_up' => ['guardUseUp'],
  61.         ];
  62.     }
  63. }