vendor/symfony/webpack-encore-bundle/src/EventListener/PreLoadAssetsEventListener.php line 30

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony WebpackEncoreBundle package.
  4.  * (c) Fabien Potencier <fabien@symfony.com>
  5.  * For the full copyright and license information, please view the LICENSE
  6.  * file that was distributed with this source code.
  7.  */
  8. namespace Symfony\WebpackEncoreBundle\EventListener;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  11. use Symfony\Component\WebLink\GenericLinkProvider;
  12. use Symfony\Component\WebLink\Link;
  13. use Symfony\WebpackEncoreBundle\Asset\TagRenderer;
  14. /**
  15.  * @author Ryan Weaver <ryan@symfonycasts.com>
  16.  */
  17. class PreLoadAssetsEventListener implements EventSubscriberInterface
  18. {
  19.     private $tagRenderer;
  20.     public function __construct(TagRenderer $tagRenderer)
  21.     {
  22.         $this->tagRenderer $tagRenderer;
  23.     }
  24.     public function onKernelResponse(ResponseEvent $event): void
  25.     {
  26.         if (!$event->isMainRequest()) {
  27.             return;
  28.         }
  29.         $request $event->getRequest();
  30.         if (null === $linkProvider $request->attributes->get('_links')) {
  31.             $request->attributes->set(
  32.                 '_links',
  33.                 new GenericLinkProvider()
  34.             );
  35.         }
  36.         /** @var GenericLinkProvider $linkProvider */
  37.         $linkProvider $request->attributes->get('_links');
  38.         $defaultAttributes $this->tagRenderer->getDefaultAttributes();
  39.         $crossOrigin $defaultAttributes['crossorigin'] ?? false;
  40.         foreach ($this->tagRenderer->getRenderedScripts() as $href) {
  41.             $link $this->createLink('preload'$href)->withAttribute('as''script');
  42.             if (false !== $crossOrigin) {
  43.                 $link $link->withAttribute('crossorigin'$crossOrigin);
  44.             }
  45.             $linkProvider $linkProvider->withLink($link);
  46.         }
  47.         foreach ($this->tagRenderer->getRenderedStyles() as $href) {
  48.             $link $this->createLink('preload'$href)->withAttribute('as''style');
  49.             if (false !== $crossOrigin) {
  50.                 $link $link->withAttribute('crossorigin'$crossOrigin);
  51.             }
  52.             $linkProvider $linkProvider->withLink($link);
  53.         }
  54.         $request->attributes->set('_links'$linkProvider);
  55.     }
  56.     public static function getSubscribedEvents(): array
  57.     {
  58.         return [
  59.             // must run before AddLinkHeaderListener
  60.             'kernel.response' => ['onKernelResponse'50],
  61.         ];
  62.     }
  63.     private function createLink(string $relstring $href): Link
  64.     {
  65.         return new Link($rel$href);
  66.     }
  67. }