読み込みが終了しない場合は、しばらく待つか、リロードを行なってください。
If loading does not finish, wait for a while or reload.
エンジニア向けの情報を発信するブログです。
どなたでも発信できます。
お好きに利用していただれば幸いです。
Symfony アプリケーションの実行中に、多くのイベント通知がトリガーされます。アプリケーションはこれらの通知をリッスンし、任意のコードを実行して応答できます。
symfony は、HTTP リクエストの処理中にカーネルに関連するいくつかのイベントをトリガーします。サードパーティのバンドルもイベントをディスパッチする場合があり、独自のコードからカスタム イベントをディスパッチすることもできます。
📁 root/src/Eccube/Controller/ProductController.php ~~ 省略 $event = new EventArgs( [ 'builder' => $builder, ], $request ); $this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_INITIALIZE, $event);
EccubeEvents::FRONT_PRODUCT_INDEX_INITIALIZE
📁 root/index.php ~~ 省略 $kernel = new Kernel($env, $debug); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response); //👈 こいつの処理の中でイベントが発火される
$response->send();
fastcgi_finish_request()
2022-10-29追記
php-fpmの環境構築はこちらに記事にしました。(バージョンはECCUBE4.2です)
📁 root/app/Customize/EventListener/TerminateListener <?php namespace Customize\EventListener; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\PostResponseEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class TerminateListener implements EventSubscriberInterface { public function __construct() { } public function onTerminate(PostResponseEvent $event) { } public static function getSubscribedEvents() { return array(KernelEvents::TERMINATE => 'onTerminate'); } }
📁 root/app/Customize/EventListener/TerminateListener <?php namespace Customize\EventListener\Admin; use Eccube\Entity\Order; use Eccube\Entity\Master\OrderStatus; use Eccube\Repository\OrderRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpKernel\KernelEvents; use Eccube\Repository\Master\OrderStatusRepository; use Symfony\Component\HttpKernel\Event\PostResponseEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class TerminateListener implements EventSubscriberInterface { private $orderRepository; private $entityManager; private $orderStatusRepository; public function __construct( OrderRepository $orderRepository, EntityManagerInterface $entityManager, OrderStatusRepository $orderStatusRepository ) { $this->orderRepository = $orderRepository; $this->entityManager = $entityManager; $this->orderStatusRepository = $orderStatusRepository; } public function onTerminate(PostResponseEvent $event) { $request = $event->getRequest(); $order_id = $request->get('order_id'); $order = $this->orderRepository->find($order_id); $order->setOrderStatus($this->orderStatusRepository->find(OrderStatus::CANCEL)); $this->entityManager->persist($order); $this->entityManager->flush(); } public static function getSubscribedEvents() { return array(KernelEvents::TERMINATE => 'onTerminate'); } }
📁 root/app/Customize/EventListener/TerminateListener <?php namespace Customize\EventListener\Admin; use Eccube\Entity\Order; use Eccube\Entity\Master\OrderStatus; use Eccube\Repository\OrderRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpKernel\KernelEvents; use Eccube\Repository\Master\OrderStatusRepository; use Symfony\Component\HttpKernel\Event\PostResponseEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class TerminateListener implements EventSubscriberInterface { private $orderRepository; private $entityManager; private $orderStatusRepository; public function __construct( OrderRepository $orderRepository, EntityManagerInterface $entityManager, OrderStatusRepository $orderStatusRepository ) { $this->orderRepository = $orderRepository; $this->entityManager = $entityManager; $this->orderStatusRepository = $orderStatusRepository; } public function onTerminate(PostResponseEvent $event) { $request = $event->getRequest(); $order_id = $request->get('order_id'); $order = $this->orderRepository->find($order_id); $order->setOrderStatus($this->orderStatusRepository->find(OrderStatus::CANCEL)); $this->entityManager->persist($order); $this->entityManager->flush(); // 👇 こいつを追加 $this->entityManager->commit(); } public static function getSubscribedEvents() { return array(KernelEvents::TERMINATE => 'onTerminate'); } }
$this->entityManager->commit();