app/Plugin/CustomerClassOnlyPage4/EventSubscriber/Admin/DeletePageSubscriber.php line 62

Open in your IDE?
  1. <?php
  2. namespace Plugin\CustomerClassOnlyPage4\EventSubscriber\Admin;
  3. use Eccube\Repository\PageRepository;
  4. use Plugin\CustomerClassOnlyPage4\Exception\PageException;
  5. use Plugin\CustomerClassOnlyPage4\Repository\PageCustomerClassRepository;
  6. use Plugin\CustomerClassOnlyPage4\Request\Context;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  9. use Symfony\Component\HttpKernel\Exception\HttpException;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. class DeletePageSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var Context
  15.      */
  16.     private $context;
  17.     /**
  18.      * @var PageRepository
  19.      */
  20.     private $pageRepository;
  21.     /**
  22.      * @var PageCustomerClassRepository
  23.      */
  24.     private $pageCustomerClassRepository;
  25.     public function __construct(
  26.         Context $context,
  27.         PageRepository $pageRepository,
  28.         PageCustomerClassRepository $pageCustomerClassRepository
  29.     )
  30.     {
  31.         $this->context $context;
  32.         $this->pageRepository $pageRepository;
  33.         $this->pageCustomerClassRepository $pageCustomerClassRepository;
  34.     }
  35.     /**
  36.      * @inheritDoc
  37.      */
  38.     public static function getSubscribedEvents()
  39.     {
  40.         // TODO: Implement getSubscribedEvents() method.
  41.         return [
  42.             KernelEvents::REQUEST => 'onKernelRequest'
  43.         ];
  44.     }
  45.     /**
  46.      * 会員種別が登録されたページを削除すると外部キー制約でエラーが発生するが、
  47.      * テンプレートは削除されてしまい編集ページにアクセスできなくなるので、
  48.      * 会員種別が登録されているページは削除できないようにする
  49.      *
  50.      * @param GetResponseEvent $event
  51.      */
  52.     public function onKernelRequest(GetResponseEvent $event)
  53.     {
  54.         if (!$this->context->isRoute("admin_content_page_delete")) {
  55.             return;
  56.         }
  57.         $Page $this->pageRepository->findOneBy([
  58.             'id' => $event->getRequest()->get('id'),
  59.         ]);
  60.         $PageCustomerClasses $this->pageCustomerClassRepository->findBy(['Page' => $Page]);
  61.         if($PageCustomerClasses) {
  62.             throw new HttpException(400"会員種別が登録されているので削除できません。");
  63.         }
  64.     }
  65. }