From 9ddbd6269407a48d63ad3e480161a4e4c7028cf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Hochd=C3=B6rfer?= Date: Sat, 6 Jul 2024 12:52:03 +0200 Subject: [PATCH] Introduce attribute for url matching strategy --- README.md | 4 ++-- src/Attribute/AsUrlStrategy.php | 19 +++++++++++++++++++ ...xpertSyliusForceCustomerLoginExtension.php | 14 ++++++++++++++ ...RegisterDoctrineMiddlewareCompilerPass.php | 4 ++-- src/DependencyInjection/Configuration.php | 1 - src/Doctrine/DBAL/Types/Strategy.php | 2 +- src/Model/NegatedRegexMatcher.php | 3 +++ src/Model/RegexMatcher.php | 3 +++ src/Model/StaticMatcher.php | 3 +++ src/Resources/config/services/strategies.xml | 14 +++++--------- 10 files changed, 52 insertions(+), 15 deletions(-) create mode 100644 src/Attribute/AsUrlStrategy.php diff --git a/README.md b/README.md index 1f3b66e..0fe3388 100644 --- a/README.md +++ b/README.md @@ -97,8 +97,8 @@ Based on the RegEx strategy, but negates the result. Helpful if only a few pages ### Add custom strategy The strategy configuration is meant to be extensible. You can create an own strategy by creating a new class that -implements the `\BitExpert\SyliusForceCustomerLoginPlugin\Model\StrategyInterface` interface and is tagged with -`force_customer_login.url_strategy` in your service configuration. +implements the `\BitExpert\SyliusForceCustomerLoginPlugin\Model\StrategyInterface` interface. Your custom class needs +to be registered as a service and be annotated with `#[AsUrlStrategy]`. ## Tests diff --git a/src/Attribute/AsUrlStrategy.php b/src/Attribute/AsUrlStrategy.php new file mode 100644 index 0000000..7bef1f0 --- /dev/null +++ b/src/Attribute/AsUrlStrategy.php @@ -0,0 +1,19 @@ +load('services.xml'); $this->registerResources('bitexpert_sylius_forcelogin', $config['driver'], $config['resources'], $container); + + $this->registerAutoconfiguration($container); + } + + private function registerAutoconfiguration(ContainerBuilder $container): void + { + $container->registerAttributeForAutoconfiguration( + AsUrlStrategy::class, + static function (ChildDefinition $definition): void { + $definition->addTag(AsUrlStrategy::SERVICE_TAG); + }, + ); } } diff --git a/src/DependencyInjection/Compiler/RegisterDoctrineMiddlewareCompilerPass.php b/src/DependencyInjection/Compiler/RegisterDoctrineMiddlewareCompilerPass.php index 57db518..aee4556 100644 --- a/src/DependencyInjection/Compiler/RegisterDoctrineMiddlewareCompilerPass.php +++ b/src/DependencyInjection/Compiler/RegisterDoctrineMiddlewareCompilerPass.php @@ -28,7 +28,7 @@ public function process(ContainerBuilder $container): void $middlewareMethodCallArgs = $this->extractMethodCallArgs($configDefinition); $middlewareMethodCallArgs[0] = array_merge( - $setMiddlewaresMethodCallArguments[0] ?? [], + $middlewareMethodCallArgs[0] ?? [], [new Reference('bitexpert.sylius_force_customer_login_plugin.doctrine.middleware')], ); @@ -37,7 +37,7 @@ public function process(ContainerBuilder $container): void ->addMethodCall('setMiddlewares', $middlewareMethodCallArgs); } - /** @return array[] */ + /** @return Reference[] */ private function extractMethodCallArgs(Definition $definition): array { foreach ($definition->getMethodCalls() as $methodCall) { diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index d1bab50..8ef3819 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -61,7 +61,6 @@ private function addResourcesSection(ArrayNodeDefinition $node): void ->scalarNode('form')->defaultValue(WhitelistEntryType::class)->cannotBeEmpty()->end() ->end() ->end() - ->end() ->end() ->end() diff --git a/src/Doctrine/DBAL/Types/Strategy.php b/src/Doctrine/DBAL/Types/Strategy.php index 02fab0a..56db439 100644 --- a/src/Doctrine/DBAL/Types/Strategy.php +++ b/src/Doctrine/DBAL/Types/Strategy.php @@ -31,7 +31,7 @@ public function getName() /** * @param StrategyInterface[] $strategies */ - public function setStrategies(array $strategies) + public function setStrategies(array $strategies): void { $this->strategies = $strategies; } diff --git a/src/Model/NegatedRegexMatcher.php b/src/Model/NegatedRegexMatcher.php index d4b1cb4..d7e6ec5 100644 --- a/src/Model/NegatedRegexMatcher.php +++ b/src/Model/NegatedRegexMatcher.php @@ -12,6 +12,9 @@ namespace BitExpert\SyliusForceCustomerLoginPlugin\Model; +use BitExpert\SyliusForceCustomerLoginPlugin\Attribute\AsUrlStrategy; + +#[AsUrlStrategy] class NegatedRegexMatcher extends RegexMatcher { public function getType(): string diff --git a/src/Model/RegexMatcher.php b/src/Model/RegexMatcher.php index ffa6b31..fc943ef 100644 --- a/src/Model/RegexMatcher.php +++ b/src/Model/RegexMatcher.php @@ -12,6 +12,9 @@ namespace BitExpert\SyliusForceCustomerLoginPlugin\Model; +use BitExpert\SyliusForceCustomerLoginPlugin\Attribute\AsUrlStrategy; + +#[AsUrlStrategy] class RegexMatcher implements StrategyInterface { public function getType(): string diff --git a/src/Model/StaticMatcher.php b/src/Model/StaticMatcher.php index cce6569..93c03a9 100644 --- a/src/Model/StaticMatcher.php +++ b/src/Model/StaticMatcher.php @@ -12,6 +12,9 @@ namespace BitExpert\SyliusForceCustomerLoginPlugin\Model; +use BitExpert\SyliusForceCustomerLoginPlugin\Attribute\AsUrlStrategy; + +#[AsUrlStrategy] class StaticMatcher implements StrategyInterface { public function getType(): string diff --git a/src/Resources/config/services/strategies.xml b/src/Resources/config/services/strategies.xml index 7d25eb5..1804a7a 100644 --- a/src/Resources/config/services/strategies.xml +++ b/src/Resources/config/services/strategies.xml @@ -4,16 +4,12 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> - - - + - - - + - - - + + +