99
1010namespace Symfony \WebpackEncoreBundle \EventListener ;
1111
12- use Fig \Link \GenericLinkProvider ;
13- use Fig \Link \Link ;
12+ use Fig \Link \GenericLinkProvider as FigGenericLinkProvider ;
13+ use Fig \Link \Link as FigLink ;
14+ use Symfony \Component \WebLink \GenericLinkProvider ;
15+ use Symfony \Component \WebLink \Link ;
1416use Symfony \Component \EventDispatcher \EventSubscriberInterface ;
1517use Symfony \Component \HttpKernel \Event \ResponseEvent ;
1618use Symfony \WebpackEncoreBundle \Asset \TagRenderer ;
@@ -39,16 +41,20 @@ public function onKernelResponse($event)
3941 $ request = $ event ->getRequest ();
4042
4143 if (null === $ linkProvider = $ request ->attributes ->get ('_links ' )) {
42- $ request ->attributes ->set ('_links ' , new GenericLinkProvider ());
44+ $ request ->attributes ->set (
45+ '_links ' ,
46+ // For backwards-compat with symfony/web-link 4.3 and lower
47+ class_exists (GenericLinkProvider::class) ? new GenericLinkProvider () : new FigGenericLinkProvider ()
48+ );
4349 }
4450
45- /** @var GenericLinkProvider $linkProvider */
51+ /** @var GenericLinkProvider|FigGenericLinkProvider $linkProvider */
4652 $ linkProvider = $ request ->attributes ->get ('_links ' );
4753 $ defaultAttributes = $ this ->tagRenderer ->getDefaultAttributes ();
4854 $ crossOrigin = $ defaultAttributes ['crossorigin ' ] ?? false ;
4955
5056 foreach ($ this ->tagRenderer ->getRenderedScripts () as $ href ) {
51- $ link = (new Link ('preload ' , $ href ))->withAttribute ('as ' , 'script ' );
57+ $ link = ($ this -> createLink ('preload ' , $ href ))->withAttribute ('as ' , 'script ' );
5258
5359 if (false !== $ crossOrigin ) {
5460 $ link = $ link ->withAttribute ('crossorigin ' , $ crossOrigin );
@@ -58,7 +64,7 @@ public function onKernelResponse($event)
5864 }
5965
6066 foreach ($ this ->tagRenderer ->getRenderedStyles () as $ href ) {
61- $ link = (new Link ('preload ' , $ href ))->withAttribute ('as ' , 'style ' );
67+ $ link = ($ this -> createLink ('preload ' , $ href ))->withAttribute ('as ' , 'style ' );
6268
6369 if (false !== $ crossOrigin ) {
6470 $ link = $ link ->withAttribute ('crossorigin ' , $ crossOrigin );
@@ -77,4 +83,16 @@ public static function getSubscribedEvents()
7783 'kernel.response ' => ['onKernelResponse ' , 50 ],
7884 ];
7985 }
86+
87+ /**
88+ * For backwards-compat with symfony/web-link 4.3 and lower
89+ *
90+ * @return Link|FigLink
91+ */
92+ private function createLink (string $ rel , string $ href )
93+ {
94+ $ class = class_exists (Link::class) ? Link::class : FigLink::class;
95+
96+ return new $ class ($ rel , $ href );
97+ }
8098}
0 commit comments