app/Plugin/CustomerClassOnlyPage4/EventSubscriber/Front/ProductDetailSubscriber.php line 32

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 ProductDetailSubscriber
  7.  * @package Plugin\CustomerClassOnlyPage4\EventSubscriber\Front
  8.  */
  9. class ProductDetailSubscriber 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_detail")) {
  30.             return;
  31.         }
  32.         $Product $this->productRepository->find($event->getRequest()->get('id'));
  33.         // 特定会員限定商品として登録されているか探す
  34.         $ProductCustomerClass $this->productCustomerClassRepository->findOneBy([
  35.             'Product' => $Product,
  36.         ]);
  37.         // 特定会員限定商品として登録されていなかったら表示
  38.         if (is_null($ProductCustomerClass)) {
  39.             return;
  40.         }
  41.         if ($this->authorizationChecker->isGranted('ROLE_USER')) {
  42.             // 特定会員として登録されているか探す
  43.             $CustomerCustomerClass $this->customerCustomerClassRepository->findOneBy([
  44.                 'Customer' => $this->context->getCurrentUser(),
  45.             ]);
  46.             if ($CustomerCustomerClass) {
  47.                 // 特定会員限定商品と紐付いている会員かどうか探す
  48.                 $ProductCustomerClass $this->productCustomerClassRepository->findOneBy([
  49.                     'Product' => $Product,
  50.                     'CustomerClass' => $CustomerCustomerClass->getCustomerClass(),
  51.                 ]);
  52.                 // 特定会員限定商品と紐付いている会員だったら表示
  53.                 if ($ProductCustomerClass) {
  54.                     return;
  55.                 }
  56.             }
  57.         }
  58.         $this->redirectToErrorPage($event);
  59.     }
  60. }