app/Plugin/CustomerClassOnlyPage4/EventSubscriber/Front/ProductListSubscriber.php line 33

Open in your IDE?
  1. <?php
  2. namespace Plugin\CustomerClassOnlyPage4\EventSubscriber\Front;
  3. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  4. use Symfony\Component\HttpKernel\KernelEvents;
  5. /**
  6.  * Class ProductListSubscriber
  7.  * @package Plugin\CustomerClassOnlyPage4\EventSubscriber\Front
  8.  */
  9. class ProductListSubscriber extends AbstractSubscriber
  10. {
  11.     /**
  12.      * @inheritDoc
  13.      */
  14.     public static function getSubscribedEvents()
  15.     {
  16.         // TODO: Implement getSubscribedEvents() method.
  17.         return [
  18.             KernelEvents::REQUEST => 'onKernelRequest'
  19.         ];
  20.     }
  21.     /**
  22.      * 商品一覧ページで特定会員チェック
  23.      *
  24.      * @param GetResponseEvent $event
  25.      */
  26.     public function onKernelRequest(GetResponseEvent $event)
  27.     {
  28.         // 商品一覧ページじゃなかったらスルー
  29.         if (!$this->context->isRoute("product_list")) {
  30.             return;
  31.         }
  32.         // category_idがない場合、PostgreSQLでエラーが出る問題回避
  33.         if (!$event->getRequest()->get('category_id')) {
  34.             return;
  35.         }
  36.         $Category $this->categoryRepository->find($event->getRequest()->get('category_id'));
  37.         // 特定会員限定カテゴリとして登録されているか探す
  38.         $CategoryCustomerClass $this->categoryCustomerClassRepository->findOneBy([
  39.             "Category" => $Category
  40.         ]);
  41.         // 特定会員限定カテゴリとして登録されていなかったら表示
  42.         if (is_null($CategoryCustomerClass)) {
  43.             return;
  44.         }
  45.         if ($this->authorizationChecker->isGranted('ROLE_USER')) {
  46.             // 特定会員として登録されているか探す
  47.             $CustomerCustomerClass $this->customerCustomerClassRepository->findOneBy([
  48.                 'Customer' => $this->context->getCurrentUser(),
  49.             ]);
  50.             if ($CustomerCustomerClass) {
  51.                 // 特定会員限定ページと紐付いている会員かどうか探す
  52.                 $CategoryCustomerClass $this->categoryCustomerClassRepository->findOneBy([
  53.                     'Category' => $Category,
  54.                     'CustomerClass' => $CustomerCustomerClass->getCustomerClass(),
  55.                 ]);
  56.                 // 特定会員限定カテゴリと紐付いている会員だったら表示
  57.                 if ($CategoryCustomerClass) {
  58.                     return;
  59.                 }
  60.             }
  61.         }
  62.         $this->redirectToErrorPage($event);
  63.     }
  64. }