Skip to content

Commit addf9a5

Browse files
committed
Fixing compat with symfony/web-link 4.4 and own impl of Fig link
1 parent 10acbc0 commit addf9a5

File tree

3 files changed

+38
-15
lines changed

3 files changed

+38
-15
lines changed

composer.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@
3232
"symfony/framework-bundle": "^3.4 || ^4.0 || ^5.0",
3333
"symfony/phpunit-bridge": "^4.3.5 || ^5.0",
3434
"symfony/twig-bundle": "^3.4 || ^4.0 || ^5.0",
35-
"symfony/web-link": "^3.4 || ^4.0 || ^5.0",
36-
"fig/link-util": "^1.0"
35+
"symfony/web-link": "^3.4 || ^4.0 || ^5.0"
3736
},
3837
"extra": {
3938
"thanks": {

src/EventListener/PreLoadAssetsEventListener.php

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99

1010
namespace 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;
1416
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1517
use Symfony\Component\HttpKernel\Event\ResponseEvent;
1618
use 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
}

tests/EventListener/PreLoadAssetsEventListenerTest.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99

1010
namespace Symfony\WebpackEncoreBundle\Tests\Asset;
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;
1416
use PHPUnit\Framework\TestCase;
1517
use Symfony\Component\HttpFoundation\Request;
1618
use Symfony\Component\HttpFoundation\Response;
@@ -35,10 +37,12 @@ public function testItPreloadsAssets()
3537
$listener = new PreLoadAssetsEventListener($tagRenderer);
3638
$listener->onKernelResponse($event);
3739
$this->assertTrue($request->attributes->has('_links'));
38-
/** @var GenericLinkProvider $linkProvider */
40+
/** @var GenericLinkProvider|FigGenericLinkProvider $linkProvider */
3941
$linkProvider = $request->attributes->get('_links');
40-
$this->assertInstanceOf(GenericLinkProvider::class, $linkProvider);
41-
/** @var Link[] $links */
42+
43+
$expectedProviderClass = class_exists(GenericLinkProvider::class) ? GenericLinkProvider::class : FigGenericLinkProvider::class;
44+
$this->assertInstanceOf($expectedProviderClass, $linkProvider);
45+
/** @var Link[]|FigLink[] $links */
4246
$links = array_values($linkProvider->getLinks());
4347
$this->assertCount(2, $links);
4448
$this->assertSame('/file1.js', $links[0]->getHref());
@@ -58,14 +62,16 @@ public function testItReusesExistingLinkProvider()
5862
$tagRenderer->expects($this->once())->method('getRenderedStyles')->willReturn([]);
5963

6064
$request = new Request();
61-
$linkProvider = new GenericLinkProvider([new Link('preload', 'bar.js')]);
65+
$linkProviderClass = class_exists(GenericLinkProvider::class) ? GenericLinkProvider::class : FigGenericLinkProvider::class;
66+
$linkClass = class_exists(Link::class) ? Link::class : FigLink::class;
67+
$linkProvider = new $linkProviderClass([new $linkClass('preload', 'bar.js')]);
6268
$request->attributes->set('_links', $linkProvider);
6369

6470
$response = new Response();
6571
$event = $this->createResponseEvent($request, HttpKernelInterface::MASTER_REQUEST, $response);
6672
$listener = new PreLoadAssetsEventListener($tagRenderer);
6773
$listener->onKernelResponse($event);
68-
/** @var GenericLinkProvider $linkProvider */
74+
/** @var GenericLinkProvider|FigGenericLinkProvider $linkProvider */
6975
$linkProvider = $request->attributes->get('_links');
7076
$this->assertCount(2, $linkProvider->getLinks());
7177
}

0 commit comments

Comments
 (0)