app/Plugin/Furupo4/EventSubscriber/OrderTemplateSubscriber.php line 28

Open in your IDE?
  1. <?php
  2. namespace Plugin\Furupo4\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. use Symfony\Component\Routing\RouterInterface;
  7. class OrderTemplateSubscriber implements EventSubscriberInterface
  8. {
  9.     private $router;
  10.     private $translator;
  11.     public function __construct(RouterInterface $router)
  12.     {
  13.         $this->router $router;
  14.     }
  15.     public static function getSubscribedEvents()
  16.     {
  17.         return [
  18.             // kernel.response イベントでレスポンス内容を加工する
  19.             KernelEvents::RESPONSE => 'onKernelResponse',
  20.         ];
  21.     }
  22.     public function onKernelResponse(ResponseEvent $event)
  23.     {
  24.         $request $event->getRequest();
  25.         $route $request->attributes->get('_route');
  26.         // 管理画面の注文ページ(ルート名が admin_order または admin_order_page)の時のみ処理
  27.         if (!in_array($route, ['admin_order''admin_order_page'])) {
  28.             return;
  29.         }
  30.         
  31.         $response $event->getResponse();
  32.         $content $response->getContent();
  33.         // shippingCsvDownload リンクの部分を検出し、その直後に新しいリンクを追加
  34.         if (preg_match('#(<a class="dropdown-item".*?id="shippingCsvDownload">.*?</a>)#s'$content$matches)) {
  35.             $shippingLink $matches[1];
  36.             // ルーターと翻訳サービスを使用して、リンクのURLとテキストを取得
  37.             $url $this->router->generate('admin_furupo_export');
  38.             $newLink "<a class=\"dropdown-item\" href=\"{$url}\" id=\"adminFurupoExport\">ふるぽCSV</a>";
  39.             $replacement $shippingLink $newLink;
  40.             $content str_replace($shippingLink$replacement$content);
  41.             $response->setContent($content);
  42.         }
  43.     }
  44. }