src/EventSubscriber/AdminAssetSubscriber.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Pimcore\Event\AdminEvents;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\EventDispatcher\GenericEvent;
  6. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. class AdminAssetSubscriber implements EventSubscriberInterface
  9. {
  10.     private array $customAssets = [
  11.         'css' => [
  12.             '/admin/css/custom.css'
  13.         ],
  14.         'js' => [
  15.             '/admin/js/custom.js'
  16.         ]
  17.     ];
  18.     public static function getSubscribedEvents(): array
  19.     {
  20.         return [
  21.             KernelEvents::RESPONSE => 'onKernelResponse',
  22.         ];
  23.     }
  24.     public function onKernelResponse(ResponseEvent $event): void
  25.     {
  26.         if (!$event->isMainRequest()) {
  27.             return;
  28.         }
  29.         $request $event->getRequest();
  30.         $response $event->getResponse();
  31.         // Only inject assets in Pimcore admin area
  32.         if (!$this->isAdminRequest($request)) {
  33.             return;
  34.         }
  35.         $content $response->getContent();
  36.         if (!$content || !str_contains($content'</head>')) {
  37.             return;
  38.         }
  39.         $assetsHtml $this->generateAssetsHtml();
  40.         $content str_replace('</head>'$assetsHtml '</head>'$content);
  41.         
  42.         $response->setContent($content);
  43.     }
  44.     private function isAdminRequest($request): bool
  45.     {
  46.         $path $request->getPathInfo();
  47.         return str_starts_with($path'/admin') || 
  48.                str_contains($request->getUri(), '/admin/');
  49.     }
  50.     private function generateAssetsHtml(): string
  51.     {
  52.         $html "\n<!-- Custom Admin Assets -->\n";
  53.         
  54.         // Add CSS files
  55.         foreach ($this->customAssets['css'] as $cssFile) {
  56.             $html .= sprintf('<link rel="stylesheet" type="text/css" href="%s">' "\n"$cssFile);
  57.         }
  58.         
  59.         // Add JS files
  60.         foreach ($this->customAssets['js'] as $jsFile) {
  61.             $html .= sprintf('<script type="text/javascript" src="%s"></script>' "\n"$jsFile);
  62.         }
  63.         
  64.         return $html;
  65.     }
  66. }