読み込みが終了しない場合は、しばらく待つか、リロードを行なってください。
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();