From df307d7045c033d5e8bcf914124d6615b7dea6aa Mon Sep 17 00:00:00 2001 From: homersimpsons Date: Wed, 21 Sep 2022 14:27:33 +0200 Subject: [PATCH 1/3] Automatically tag services, and defaults to their id --- DependencyInjection/Compiler/FiltersCompilerPass.php | 2 +- DependencyInjection/Compiler/LoadersCompilerPass.php | 2 +- .../Compiler/PostProcessorsCompilerPass.php | 2 +- LiipImagineBundle.php | 7 +++++++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/DependencyInjection/Compiler/FiltersCompilerPass.php b/DependencyInjection/Compiler/FiltersCompilerPass.php index 64302793..891eba47 100644 --- a/DependencyInjection/Compiler/FiltersCompilerPass.php +++ b/DependencyInjection/Compiler/FiltersCompilerPass.php @@ -24,7 +24,7 @@ public function process(ContainerBuilder $container): void $manager = $container->getDefinition('liip_imagine.filter.manager'); foreach ($tags as $id => $tag) { - $manager->addMethodCall('addLoader', [$tag[0]['loader'], new Reference($id)]); + $manager->addMethodCall('addLoader', [$tag[0]['loader'] ?? $id, new Reference($id)]); $this->log($container, 'Registered filter loader: %s', $id); } } diff --git a/DependencyInjection/Compiler/LoadersCompilerPass.php b/DependencyInjection/Compiler/LoadersCompilerPass.php index e3b7c898..74642aa2 100644 --- a/DependencyInjection/Compiler/LoadersCompilerPass.php +++ b/DependencyInjection/Compiler/LoadersCompilerPass.php @@ -24,7 +24,7 @@ public function process(ContainerBuilder $container): void $manager = $container->getDefinition('liip_imagine.data.manager'); foreach ($tags as $id => $tag) { - $manager->addMethodCall('addLoader', [$tag[0]['loader'], new Reference($id)]); + $manager->addMethodCall('addLoader', [$tag[0]['loader'] ?? $id, new Reference($id)]); $this->log($container, 'Registered binary loader: %s', $id); } } diff --git a/DependencyInjection/Compiler/PostProcessorsCompilerPass.php b/DependencyInjection/Compiler/PostProcessorsCompilerPass.php index 8d3b46bd..a3b45348 100644 --- a/DependencyInjection/Compiler/PostProcessorsCompilerPass.php +++ b/DependencyInjection/Compiler/PostProcessorsCompilerPass.php @@ -29,7 +29,7 @@ public function process(ContainerBuilder $container): void $manager = $container->getDefinition('liip_imagine.filter.manager'); foreach ($tags as $id => $tag) { - $manager->addMethodCall('addPostProcessor', [$tag[0]['post_processor'], new Reference($id)]); + $manager->addMethodCall('addPostProcessor', [$tag[0]['post_processor'] ?? $id, new Reference($id)]); $this->log($container, 'Registered filter post-processor: %s', $id); } } diff --git a/LiipImagineBundle.php b/LiipImagineBundle.php index 063ae4e8..8e9fd75e 100644 --- a/LiipImagineBundle.php +++ b/LiipImagineBundle.php @@ -13,6 +13,7 @@ use Enqueue\Bundle\DependencyInjection\Compiler\AddTopicMetaPass; use Liip\ImagineBundle\Async\Topics; +use Liip\ImagineBundle\Binary\Loader\LoaderInterface as BinaryLoaderInterface; use Liip\ImagineBundle\DependencyInjection\Compiler\AssetsVersionCompilerPass; use Liip\ImagineBundle\DependencyInjection\Compiler\DriverCompilerPass; use Liip\ImagineBundle\DependencyInjection\Compiler\FiltersCompilerPass; @@ -30,6 +31,8 @@ use Liip\ImagineBundle\DependencyInjection\Factory\Resolver\FlysystemResolverFactory; use Liip\ImagineBundle\DependencyInjection\Factory\Resolver\WebPathResolverFactory; use Liip\ImagineBundle\DependencyInjection\LiipImagineExtension; +use Liip\ImagineBundle\Imagine\Filter\Loader\LoaderInterface as LoaderLoaderInterface; +use Liip\ImagineBundle\Imagine\Filter\PostProcessor\PostProcessorInterface; use Symfony\Component\DependencyInjection\Compiler\PassConfig; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; @@ -67,5 +70,9 @@ public function build(ContainerBuilder $container): void $extension->addLoaderFactory(new FileSystemLoaderFactory()); $extension->addLoaderFactory(new FlysystemLoaderFactory()); $extension->addLoaderFactory(new ChainLoaderFactory()); + + $container->registerForAutoconfiguration(LoaderLoaderInterface::class)->addTag('liip_imagine.filter.loader'); + $container->registerForAutoconfiguration(PostProcessorInterface::class)->addTag('liip_imagine.filter.post_processor'); + $container->registerForAutoconfiguration(BinaryLoaderInterface::class)->addTag('liip_imagine.binary.loader'); } } From ba7ed522ad0be2835719fb2f445664358c672812 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Sat, 6 Jan 2024 02:58:12 +0100 Subject: [PATCH 2/3] :memo: Update documentation about automatic service registering --- Resources/doc/data-loaders-custom.rst | 12 +++++++++++- Resources/doc/filters.rst | 14 ++++++++++++-- Resources/doc/post-processors.rst | 12 +++++++++++- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Resources/doc/data-loaders-custom.rst b/Resources/doc/data-loaders-custom.rst index 7aa23b26..7d83b0da 100644 --- a/Resources/doc/data-loaders-custom.rst +++ b/Resources/doc/data-loaders-custom.rst @@ -25,7 +25,17 @@ path to the image and needs to return an instance of ``BinaryInterface``. to sanitize this parameter in your loader to avoid exposing files outside of your image collections. -You need to `configure a service`_ with your custom loader and tag it with +Register it: automatically +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +By default, your loader will be automatically registered as it implements the ``LoaderInterface``. + +You will be able to reference and use your custom loader in your configuration by using its Fully Qualified Class Name. + +Register it: manually +^^^^^^^^^^^^^^^^^^^^^ + +If you want to give it a different name you need to `configure a service`_ with your custom loader and tag it with ``liip_imagine.binary.loader``. To register ``App\Service\MyCustomDataLoader`` with the name diff --git a/Resources/doc/filters.rst b/Resources/doc/filters.rst index 9c41d6b2..f7d20a08 100644 --- a/Resources/doc/filters.rst +++ b/Resources/doc/filters.rst @@ -53,7 +53,17 @@ The ``LoaderInterface`` has the method ``load``, which is provided an instance of ``ImageInterface`` and an array of options. It must return an ``ImageInterface``. -You need to `configure a service`_ and tag it ``liip_imagine.filter.loader``. +Register it: automatically +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +By default, your filter will be automatically registered as it implements the ``LoaderInterface``. + +You will be able to reference and use your custom filter when defining filter sets in your configuration by using its Fully Qualified Class Name. + +Register it: manually +^^^^^^^^^^^^^^^^^^^^^ + +If you want to give it a different name you need to `configure a service`_ and tag it ``liip_imagine.filter.loader``. To register a filter ``App\Service\MyCustomFilter`` as ``my_custom_filter``, use the following configuration: @@ -124,7 +134,7 @@ to the image, by passing configuration as third parameter to ``applyFilter``: public function filter(int $width, int $height) { $filter = '...'; // Name of the `filter_set` in `config/packages/liip_imagine.yaml` $path = '...'; // Path of the image, relative to `/public/` - + if (!$this->cacheManager->isStored($path, $filter)) { $binary = $this->dataManager->find($filter, $path); diff --git a/Resources/doc/post-processors.rst b/Resources/doc/post-processors.rst index 64b2e017..57fe3d47 100644 --- a/Resources/doc/post-processors.rst +++ b/Resources/doc/post-processors.rst @@ -131,7 +131,17 @@ for your custom post-processor. } } -You need to `configure a service`_ with your custom post-processor and tag it +Register it: automatically +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +By default, your post-processor will be automatically registered as it implements the ``PostProcessorInterface``. + +You will be able to reference and use your custom post-processor in your configuration by using its Fully Qualified Class Name. + +Register it: manually +^^^^^^^^^^^^^^^^^^^^^ + +If you want to give it a different name you need to `configure a service`_ with your custom post-processor and tag it with ``liip_imagine.filter.post_processor``. To register ``App\Service\MyCustomPostProcessor`` with the name From f157a0f9d8aa0363be3ef92104d6c27519a2f922 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Sat, 6 Jan 2024 19:21:42 +0100 Subject: [PATCH 3/3] :white_check_mark: Declare `registerForAutoconfiguration` in ContainerBuilder mock --- Tests/LiipImagineBundleTest.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Tests/LiipImagineBundleTest.php b/Tests/LiipImagineBundleTest.php index b70e40ab..49f9f909 100644 --- a/Tests/LiipImagineBundleTest.php +++ b/Tests/LiipImagineBundleTest.php @@ -145,7 +145,11 @@ public function testAddLoaders(): void */ protected function createContainerBuilderMock() { - return $this->createObjectMock(ContainerBuilder::class, [], false); + return $this->createObjectMock(ContainerBuilder::class, [ + 'getExtension', + 'addCompilerPass', + 'registerForAutoconfiguration', + ], false); } /**