From addf9a541ef596ebe3d2197a3e1af2f7251c2f69 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Tue, 26 Nov 2019 09:31:39 -0500 Subject: [PATCH 1/3] Fixing compat with symfony/web-link 4.4 and own impl of Fig link --- composer.json | 3 +- .../PreLoadAssetsEventListener.php | 30 +++++++++++++++---- .../PreLoadAssetsEventListenerTest.php | 20 ++++++++----- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/composer.json b/composer.json index 8c4e283e..60e4cc46 100644 --- a/composer.json +++ b/composer.json @@ -32,8 +32,7 @@ "symfony/framework-bundle": "^3.4 || ^4.0 || ^5.0", "symfony/phpunit-bridge": "^4.3.5 || ^5.0", "symfony/twig-bundle": "^3.4 || ^4.0 || ^5.0", - "symfony/web-link": "^3.4 || ^4.0 || ^5.0", - "fig/link-util": "^1.0" + "symfony/web-link": "^3.4 || ^4.0 || ^5.0" }, "extra": { "thanks": { diff --git a/src/EventListener/PreLoadAssetsEventListener.php b/src/EventListener/PreLoadAssetsEventListener.php index b696304b..30d60f4e 100644 --- a/src/EventListener/PreLoadAssetsEventListener.php +++ b/src/EventListener/PreLoadAssetsEventListener.php @@ -9,8 +9,10 @@ namespace Symfony\WebpackEncoreBundle\EventListener; -use Fig\Link\GenericLinkProvider; -use Fig\Link\Link; +use Fig\Link\GenericLinkProvider as FigGenericLinkProvider; +use Fig\Link\Link as FigLink; +use Symfony\Component\WebLink\GenericLinkProvider; +use Symfony\Component\WebLink\Link; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\WebpackEncoreBundle\Asset\TagRenderer; @@ -39,16 +41,20 @@ public function onKernelResponse($event) $request = $event->getRequest(); if (null === $linkProvider = $request->attributes->get('_links')) { - $request->attributes->set('_links', new GenericLinkProvider()); + $request->attributes->set( + '_links', + // For backwards-compat with symfony/web-link 4.3 and lower + class_exists(GenericLinkProvider::class) ? new GenericLinkProvider() : new FigGenericLinkProvider() + ); } - /** @var GenericLinkProvider $linkProvider */ + /** @var GenericLinkProvider|FigGenericLinkProvider $linkProvider */ $linkProvider = $request->attributes->get('_links'); $defaultAttributes = $this->tagRenderer->getDefaultAttributes(); $crossOrigin = $defaultAttributes['crossorigin'] ?? false; foreach ($this->tagRenderer->getRenderedScripts() as $href) { - $link = (new Link('preload', $href))->withAttribute('as', 'script'); + $link = ($this->createLink('preload', $href))->withAttribute('as', 'script'); if (false !== $crossOrigin) { $link = $link->withAttribute('crossorigin', $crossOrigin); @@ -58,7 +64,7 @@ public function onKernelResponse($event) } foreach ($this->tagRenderer->getRenderedStyles() as $href) { - $link = (new Link('preload', $href))->withAttribute('as', 'style'); + $link = ($this->createLink('preload', $href))->withAttribute('as', 'style'); if (false !== $crossOrigin) { $link = $link->withAttribute('crossorigin', $crossOrigin); @@ -77,4 +83,16 @@ public static function getSubscribedEvents() 'kernel.response' => ['onKernelResponse', 50], ]; } + + /** + * For backwards-compat with symfony/web-link 4.3 and lower + * + * @return Link|FigLink + */ + private function createLink(string $rel, string $href) + { + $class = class_exists(Link::class) ? Link::class : FigLink::class; + + return new $class($rel, $href); + } } diff --git a/tests/EventListener/PreLoadAssetsEventListenerTest.php b/tests/EventListener/PreLoadAssetsEventListenerTest.php index 1fc2a895..98bf6011 100644 --- a/tests/EventListener/PreLoadAssetsEventListenerTest.php +++ b/tests/EventListener/PreLoadAssetsEventListenerTest.php @@ -9,8 +9,10 @@ namespace Symfony\WebpackEncoreBundle\Tests\Asset; -use Fig\Link\GenericLinkProvider; -use Fig\Link\Link; +use Fig\Link\GenericLinkProvider as FigGenericLinkProvider; +use Fig\Link\Link as FigLink; +use Symfony\Component\WebLink\GenericLinkProvider; +use Symfony\Component\WebLink\Link; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -35,10 +37,12 @@ public function testItPreloadsAssets() $listener = new PreLoadAssetsEventListener($tagRenderer); $listener->onKernelResponse($event); $this->assertTrue($request->attributes->has('_links')); - /** @var GenericLinkProvider $linkProvider */ + /** @var GenericLinkProvider|FigGenericLinkProvider $linkProvider */ $linkProvider = $request->attributes->get('_links'); - $this->assertInstanceOf(GenericLinkProvider::class, $linkProvider); - /** @var Link[] $links */ + + $expectedProviderClass = class_exists(GenericLinkProvider::class) ? GenericLinkProvider::class : FigGenericLinkProvider::class; + $this->assertInstanceOf($expectedProviderClass, $linkProvider); + /** @var Link[]|FigLink[] $links */ $links = array_values($linkProvider->getLinks()); $this->assertCount(2, $links); $this->assertSame('/file1.js', $links[0]->getHref()); @@ -58,14 +62,16 @@ public function testItReusesExistingLinkProvider() $tagRenderer->expects($this->once())->method('getRenderedStyles')->willReturn([]); $request = new Request(); - $linkProvider = new GenericLinkProvider([new Link('preload', 'bar.js')]); + $linkProviderClass = class_exists(GenericLinkProvider::class) ? GenericLinkProvider::class : FigGenericLinkProvider::class; + $linkClass = class_exists(Link::class) ? Link::class : FigLink::class; + $linkProvider = new $linkProviderClass([new $linkClass('preload', 'bar.js')]); $request->attributes->set('_links', $linkProvider); $response = new Response(); $event = $this->createResponseEvent($request, HttpKernelInterface::MASTER_REQUEST, $response); $listener = new PreLoadAssetsEventListener($tagRenderer); $listener->onKernelResponse($event); - /** @var GenericLinkProvider $linkProvider */ + /** @var GenericLinkProvider|FigGenericLinkProvider $linkProvider */ $linkProvider = $request->attributes->get('_links'); $this->assertCount(2, $linkProvider->getLinks()); } From 1c55b323fa1df44c3cb3298d318366e1adadfc2d Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Tue, 26 Nov 2019 09:35:11 -0500 Subject: [PATCH 2/3] php-cs --- src/EventListener/PreLoadAssetsEventListener.php | 2 +- tests/IntegrationTest.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/EventListener/PreLoadAssetsEventListener.php b/src/EventListener/PreLoadAssetsEventListener.php index 30d60f4e..1a6461ab 100644 --- a/src/EventListener/PreLoadAssetsEventListener.php +++ b/src/EventListener/PreLoadAssetsEventListener.php @@ -85,7 +85,7 @@ public static function getSubscribedEvents() } /** - * For backwards-compat with symfony/web-link 4.3 and lower + * For backwards-compat with symfony/web-link 4.3 and lower. * * @return Link|FigLink */ diff --git a/tests/IntegrationTest.php b/tests/IntegrationTest.php index cd897100..7c4ec354 100644 --- a/tests/IntegrationTest.php +++ b/tests/IntegrationTest.php @@ -14,7 +14,6 @@ use Symfony\Bundle\FrameworkBundle\FrameworkBundle; use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait; use Symfony\Bundle\TwigBundle\TwigBundle; -use Symfony\Bundle\TwigBundle\Controller\ExceptionController; use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\ContainerBuilder; From 0a8472a646a730ca95f106dff483630c586c98b3 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Tue, 26 Nov 2019 09:43:21 -0500 Subject: [PATCH 3/3] Fixing 5.1 deprecation --- tests/IntegrationTest.php | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/tests/IntegrationTest.php b/tests/IntegrationTest.php index 7c4ec354..4a28959f 100644 --- a/tests/IntegrationTest.php +++ b/tests/IntegrationTest.php @@ -22,6 +22,7 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\HttpKernel\Log\Logger; +use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator; use Symfony\Component\Routing\RouteCollectionBuilder; use Symfony\WebpackEncoreBundle\Asset\EntrypointLookupCollectionInterface; use Symfony\WebpackEncoreBundle\Asset\EntrypointLookupInterface; @@ -177,7 +178,7 @@ public function testAutowireDefaultBuildArgument() } } -class WebpackEncoreIntegrationTestKernel extends Kernel +abstract class AbstractWebpackEncoreIntegrationTestKernel extends Kernel { use MicroKernelTrait; @@ -203,11 +204,6 @@ public function registerBundles() ]; } - protected function configureRoutes(RouteCollectionBuilder $routes) - { - $routes->add('/foo', 'kernel:'.(parent::VERSION_ID >= 40100 ? ':' : '').'renderFoo'); - } - protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader) { $container->loadFromExtension('framework', [ @@ -268,6 +264,22 @@ public function renderFoo() } } +if (method_exists(AbstractWebpackEncoreIntegrationTestKernel::class, 'configureRouting')) { + class WebpackEncoreIntegrationTestKernel extends AbstractWebpackEncoreIntegrationTestKernel { + protected function configureRouting(RoutingConfigurator $routes): void + { + $routes->add('/foo', 'kernel:'.(parent::VERSION_ID >= 40100 ? ':' : '').'renderFoo'); + } + } +} else { + class WebpackEncoreIntegrationTestKernel extends AbstractWebpackEncoreIntegrationTestKernel { + protected function configureRoutes(RouteCollectionBuilder $routes) + { + $routes->add('/foo', 'kernel:'.(parent::VERSION_ID >= 40100 ? ':' : '').'renderFoo'); + } + } +} + class WebpackEncoreCacheWarmerTester { private $entrypointCacheWarmer;