app/Customize/EventListener/ExceptionEventLintener.php line 32

Open in your IDE?
  1. <?php
  2. namespace Customize\EventListener;
  3. use Exception;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Customize\Exception\DenyProductException;
  10. class ExceptionEventLintener implements EventSubscriberInterface
  11. {
  12.     public static function getSubscribedEvents()
  13.     {
  14.         // return the subscribed events, their methods and priorities
  15.         return [
  16.             KernelEvents::EXCEPTION => [
  17.                 ['productCartAddException'10],
  18.             ],
  19.         ];
  20.     }
  21.     /**
  22.      * 商品購入時に発生させた例外のレスポンスを設定する。
  23.      * 本番環境では例外を汎用テンプレートで拾うため、カスタム例外の場合はそれをさせないようにする。
  24.      *
  25.      * @param ExceptionEvent $event
  26.      * @return void
  27.      */
  28.     public function productCartAddException(ExceptionEvent $event)
  29.     {
  30.         $exception $event->getException();
  31.         if (empty($exception)) {
  32.             return;
  33.         }
  34.         $className get_class($exception);
  35.         $code $exception->getCode();
  36.         $message $exception->getMessage();
  37.         if ($exception instanceof DenyProductException) {
  38.             $result = [
  39.                 'class' => $className,
  40.                 'code' => $code,
  41.                 'detail' => $message,
  42.             ];
  43.             $event->setResponse(new Response(json_encode($result), 500));
  44.         }
  45.     }
  46. }