From a5ea9c15d27e25cadfb744c111aa7272ecf5baa9 Mon Sep 17 00:00:00 2001 From: Andreas Schempp Date: Tue, 26 Oct 2021 18:34:56 +0200 Subject: [PATCH 1/6] Added PHP8 attributes for our existing service annotations --- .../Attribute/AsCallback.php | 28 +++++++++++++ .../Attribute/AsContentElement.php | 39 +++++++++++++++++++ .../Attribute/AsCronJob.php | 26 +++++++++++++ .../Attribute/AsFrontendModule.php | 39 +++++++++++++++++++ .../DependencyInjection/Attribute/AsHook.php | 27 +++++++++++++ .../DependencyInjection/Attribute/AsPage.php | 33 ++++++++++++++++ .../Attribute/AsPickerProvider.php | 25 ++++++++++++ .../ContaoCoreExtension.php | 38 ++++++++++++++++++ 8 files changed, 255 insertions(+) create mode 100644 core-bundle/src/DependencyInjection/Attribute/AsCallback.php create mode 100644 core-bundle/src/DependencyInjection/Attribute/AsContentElement.php create mode 100644 core-bundle/src/DependencyInjection/Attribute/AsCronJob.php create mode 100644 core-bundle/src/DependencyInjection/Attribute/AsFrontendModule.php create mode 100644 core-bundle/src/DependencyInjection/Attribute/AsHook.php create mode 100644 core-bundle/src/DependencyInjection/Attribute/AsPage.php create mode 100644 core-bundle/src/DependencyInjection/Attribute/AsPickerProvider.php diff --git a/core-bundle/src/DependencyInjection/Attribute/AsCallback.php b/core-bundle/src/DependencyInjection/Attribute/AsCallback.php new file mode 100644 index 00000000000..29255657ef2 --- /dev/null +++ b/core-bundle/src/DependencyInjection/Attribute/AsCallback.php @@ -0,0 +1,28 @@ +attributes = $attributes; + } +} diff --git a/core-bundle/src/DependencyInjection/Attribute/AsCronJob.php b/core-bundle/src/DependencyInjection/Attribute/AsCronJob.php new file mode 100644 index 00000000000..0e9a03dee0a --- /dev/null +++ b/core-bundle/src/DependencyInjection/Attribute/AsCronJob.php @@ -0,0 +1,26 @@ +attributes = $attributes; + } +} diff --git a/core-bundle/src/DependencyInjection/Attribute/AsHook.php b/core-bundle/src/DependencyInjection/Attribute/AsHook.php new file mode 100644 index 00000000000..1019e3dba89 --- /dev/null +++ b/core-bundle/src/DependencyInjection/Attribute/AsHook.php @@ -0,0 +1,27 @@ +registerForAutoconfiguration(ContentCompositionInterface::class) ->addTag('contao.page') ; + + $container->registerAttributeForAutoconfiguration(AsContentElement::class, static function (ChildDefinition $definition, AsContentElement $attribute): void { + $definition->addTag(ContentElementReference::TAG_NAME, $attribute->attributes); + }); + + $container->registerAttributeForAutoconfiguration(AsFrontendModule::class, static function (ChildDefinition $definition, AsFrontendModule $attribute): void { + $definition->addTag(FrontendModuleReference::TAG_NAME, $attribute->attributes); + }); + + $container->registerAttributeForAutoconfiguration(AsCronJob::class, static function (ChildDefinition $definition, AsCronJob $attribute): void { + $definition->addTag('contao.cronjob', get_object_vars($attribute)); + }); + + $container->registerAttributeForAutoconfiguration(AsHook::class, static function (ChildDefinition $definition, AsHook $attribute): void { + $definition->addTag('contao.hook', get_object_vars($attribute)); + }); + + $container->registerAttributeForAutoconfiguration(AsCallback::class, static function (ChildDefinition $definition, AsCallback $attribute): void { + $definition->addTag('contao.callback', get_object_vars($attribute)); + }); + + $container->registerAttributeForAutoconfiguration(AsPage::class, static function (ChildDefinition $definition, AsPage $attribute): void { + $definition->addTag('contao.page', get_object_vars($attribute)); + }); + + $container->registerAttributeForAutoconfiguration(AsPickerProvider::class, static function (ChildDefinition $definition, AsPickerProvider $attribute): void { + $definition->addTag('contao.picker_provider', get_object_vars($attribute)); + }); } private function handleSearchConfig(array $config, ContainerBuilder $container): void From 44c5d82c75a9f8fdeaaef8760e97c51f702f34f5 Mon Sep 17 00:00:00 2001 From: Andreas Schempp Date: Thu, 11 Nov 2021 07:31:30 +0100 Subject: [PATCH 2/6] Added missing page attribute --- core-bundle/src/DependencyInjection/Attribute/AsPage.php | 1 + 1 file changed, 1 insertion(+) diff --git a/core-bundle/src/DependencyInjection/Attribute/AsPage.php b/core-bundle/src/DependencyInjection/Attribute/AsPage.php index c86307b302c..475a36b0d61 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsPage.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsPage.php @@ -17,6 +17,7 @@ * * @see \Symfony\Component\Routing\Annotation\Route */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class AsPage { public function __construct( From b9201cd246c6518b17feb4f9e5b006fe9916b6ea Mon Sep 17 00:00:00 2001 From: Leo Feyer Date: Thu, 11 Nov 2021 17:37:46 +0100 Subject: [PATCH 3/6] Run the CS fixer --- .../Attribute/AsCallback.php | 8 +-- .../Attribute/AsContentElement.php | 10 +-- .../Attribute/AsCronJob.php | 6 +- .../Attribute/AsFrontendModule.php | 10 +-- .../DependencyInjection/Attribute/AsHook.php | 7 +-- .../DependencyInjection/Attribute/AsPage.php | 12 +--- .../Attribute/AsPickerProvider.php | 5 +- .../ContaoCoreExtension.php | 63 ++++++++++++------- 8 files changed, 56 insertions(+), 65 deletions(-) diff --git a/core-bundle/src/DependencyInjection/Attribute/AsCallback.php b/core-bundle/src/DependencyInjection/Attribute/AsCallback.php index 29255657ef2..a59027c3ef8 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsCallback.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsCallback.php @@ -18,11 +18,7 @@ #[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class AsCallback { - public function __construct( - public string $table, - public string $target, - public ?string $method = null, - public ?int $priority = null, - ) { + public function __construct(public string $table, public string $target, public ?string $method = null, public ?int $priority = null) + { } } diff --git a/core-bundle/src/DependencyInjection/Attribute/AsContentElement.php b/core-bundle/src/DependencyInjection/Attribute/AsContentElement.php index 7e67f019be1..7dc10059f88 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsContentElement.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsContentElement.php @@ -20,14 +20,8 @@ class AsContentElement { public array $attributes; - public function __construct( - string $type = null, - string $category, - string $template = null, - string $method = null, - string $renderer = null, - array ...$attributes, - ) { + public function __construct(string $type = null, string $category, string $template = null, string $method = null, string $renderer = null, array ...$attributes) + { $attributes['type'] = $type; $attributes['category'] = $category; $attributes['template'] = $template; diff --git a/core-bundle/src/DependencyInjection/Attribute/AsCronJob.php b/core-bundle/src/DependencyInjection/Attribute/AsCronJob.php index 0e9a03dee0a..329559cbbc1 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsCronJob.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsCronJob.php @@ -18,9 +18,7 @@ #[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class AsCronJob { - public function __construct( - public string $interval, - public ?string $method = null, - ) { + public function __construct(public string $interval, public ?string $method = null) + { } } diff --git a/core-bundle/src/DependencyInjection/Attribute/AsFrontendModule.php b/core-bundle/src/DependencyInjection/Attribute/AsFrontendModule.php index 3786de3a2da..d92d0f97ab8 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsFrontendModule.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsFrontendModule.php @@ -20,14 +20,8 @@ class AsFrontendModule { public array $attributes; - public function __construct( - string $type = null, - string $category, - string $template = null, - string $method = null, - string $renderer = null, - array ...$attributes, - ) { + public function __construct(string $type = null, string $category, string $template = null, string $method = null, string $renderer = null, array ...$attributes) + { $attributes['type'] = $type; $attributes['category'] = $category; $attributes['template'] = $template; diff --git a/core-bundle/src/DependencyInjection/Attribute/AsHook.php b/core-bundle/src/DependencyInjection/Attribute/AsHook.php index 1019e3dba89..9ec4a431454 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsHook.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsHook.php @@ -18,10 +18,7 @@ #[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class AsHook { - public function __construct( - public string $hook, - public ?string $method = null, - public ?int $priority = null, - ) { + public function __construct(public string $hook, public ?string $method = null, public ?int $priority = null) + { } } diff --git a/core-bundle/src/DependencyInjection/Attribute/AsPage.php b/core-bundle/src/DependencyInjection/Attribute/AsPage.php index 475a36b0d61..34690377a9c 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsPage.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsPage.php @@ -20,15 +20,7 @@ #[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class AsPage { - public function __construct( - public ?string $type = null, - public bool $contentComposition = true, - public ?string $path = null, - public ?string $urlSuffix = null, - public array $requirements = [], - public array $options = [], - public array $defaults = [], - public array $methods = [], - ) { + public function __construct(public ?string $type = null, public bool $contentComposition = true, public ?string $path = null, public ?string $urlSuffix = null, public array $requirements = [], public array $options = [], public array $defaults = [], public array $methods = []) + { } } diff --git a/core-bundle/src/DependencyInjection/Attribute/AsPickerProvider.php b/core-bundle/src/DependencyInjection/Attribute/AsPickerProvider.php index 91a6e99e255..6fb76cce914 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsPickerProvider.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsPickerProvider.php @@ -18,8 +18,7 @@ #[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class AsPickerProvider { - public function __construct( - public ?int $priority = null, - ) { + public function __construct(public ?int $priority = null) + { } } diff --git a/core-bundle/src/DependencyInjection/ContaoCoreExtension.php b/core-bundle/src/DependencyInjection/ContaoCoreExtension.php index 23df971e6ab..d9443a02568 100644 --- a/core-bundle/src/DependencyInjection/ContaoCoreExtension.php +++ b/core-bundle/src/DependencyInjection/ContaoCoreExtension.php @@ -130,33 +130,54 @@ public function load(array $configs, ContainerBuilder $container): void ->addTag('contao.page') ; - $container->registerAttributeForAutoconfiguration(AsContentElement::class, static function (ChildDefinition $definition, AsContentElement $attribute): void { - $definition->addTag(ContentElementReference::TAG_NAME, $attribute->attributes); - }); + $container->registerAttributeForAutoconfiguration( + AsContentElement::class, + static function (ChildDefinition $definition, AsContentElement $attribute): void { + $definition->addTag(ContentElementReference::TAG_NAME, $attribute->attributes); + } + ); - $container->registerAttributeForAutoconfiguration(AsFrontendModule::class, static function (ChildDefinition $definition, AsFrontendModule $attribute): void { - $definition->addTag(FrontendModuleReference::TAG_NAME, $attribute->attributes); - }); + $container->registerAttributeForAutoconfiguration( + AsFrontendModule::class, + static function (ChildDefinition $definition, AsFrontendModule $attribute): void { + $definition->addTag(FrontendModuleReference::TAG_NAME, $attribute->attributes); + } + ); - $container->registerAttributeForAutoconfiguration(AsCronJob::class, static function (ChildDefinition $definition, AsCronJob $attribute): void { - $definition->addTag('contao.cronjob', get_object_vars($attribute)); - }); + $container->registerAttributeForAutoconfiguration( + AsCronJob::class, + static function (ChildDefinition $definition, AsCronJob $attribute): void { + $definition->addTag('contao.cronjob', get_object_vars($attribute)); + } + ); - $container->registerAttributeForAutoconfiguration(AsHook::class, static function (ChildDefinition $definition, AsHook $attribute): void { - $definition->addTag('contao.hook', get_object_vars($attribute)); - }); + $container->registerAttributeForAutoconfiguration( + AsHook::class, + static function (ChildDefinition $definition, AsHook $attribute): void { + $definition->addTag('contao.hook', get_object_vars($attribute)); + } + ); - $container->registerAttributeForAutoconfiguration(AsCallback::class, static function (ChildDefinition $definition, AsCallback $attribute): void { - $definition->addTag('contao.callback', get_object_vars($attribute)); - }); + $container->registerAttributeForAutoconfiguration( + AsCallback::class, + static function (ChildDefinition $definition, AsCallback $attribute): void { + $definition->addTag('contao.callback', get_object_vars($attribute)); + } + ); - $container->registerAttributeForAutoconfiguration(AsPage::class, static function (ChildDefinition $definition, AsPage $attribute): void { - $definition->addTag('contao.page', get_object_vars($attribute)); - }); + $container->registerAttributeForAutoconfiguration( + AsPage::class, + static function (ChildDefinition $definition, AsPage $attribute): void { + $definition->addTag('contao.page', get_object_vars($attribute)); + } + ); - $container->registerAttributeForAutoconfiguration(AsPickerProvider::class, static function (ChildDefinition $definition, AsPickerProvider $attribute): void { - $definition->addTag('contao.picker_provider', get_object_vars($attribute)); - }); + $container->registerAttributeForAutoconfiguration( + AsPickerProvider::class, + static function (ChildDefinition $definition, AsPickerProvider $attribute): void { + $definition->addTag('contao.picker_provider', get_object_vars($attribute)); + } + ); } private function handleSearchConfig(array $config, ContainerBuilder $container): void From afd1d206930d976152062e5a4bdcbae89bc61b15 Mon Sep 17 00:00:00 2001 From: Andreas Schempp Date: Thu, 18 Nov 2021 09:17:19 +0100 Subject: [PATCH 4/6] Update AsPage attribute to match Route attribute --- .../DependencyInjection/Attribute/AsPage.php | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/core-bundle/src/DependencyInjection/Attribute/AsPage.php b/core-bundle/src/DependencyInjection/Attribute/AsPage.php index 34690377a9c..836df279c89 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsPage.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsPage.php @@ -20,7 +20,24 @@ #[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class AsPage { - public function __construct(public ?string $type = null, public bool $contentComposition = true, public ?string $path = null, public ?string $urlSuffix = null, public array $requirements = [], public array $options = [], public array $defaults = [], public array $methods = []) - { + public function __construct( + public ?string $type = null, + public ?string $path = null, + public array $requirements = [], + public array $options = [], + public array $defaults = [], + public $methods = [], + ?string $locale = null, + ?string $format = null, + public bool $contentComposition = true, + public ?string $urlSuffix = null + ) { + if (null !== $locale) { + $this->defaults['_locale'] = $locale; + } + + if (null !== $format) { + $this->defaults['_format'] = $format; + } } } From 2da42777e4200b29409099508f88c563b140dd4c Mon Sep 17 00:00:00 2001 From: Leo Feyer Date: Thu, 18 Nov 2021 10:19:22 +0100 Subject: [PATCH 5/6] Fix the CS check --- .../src/DependencyInjection/Attribute/AsPage.php | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/core-bundle/src/DependencyInjection/Attribute/AsPage.php b/core-bundle/src/DependencyInjection/Attribute/AsPage.php index 836df279c89..7b188209ade 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsPage.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsPage.php @@ -20,18 +20,8 @@ #[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class AsPage { - public function __construct( - public ?string $type = null, - public ?string $path = null, - public array $requirements = [], - public array $options = [], - public array $defaults = [], - public $methods = [], - ?string $locale = null, - ?string $format = null, - public bool $contentComposition = true, - public ?string $urlSuffix = null - ) { + public function __construct(public ?string $type = null, public ?string $path = null, public array $requirements = [], public array $options = [], public array $defaults = [], public $methods = [], ?string $locale = null, ?string $format = null, public bool $contentComposition = true, public ?string $urlSuffix = null) + { if (null !== $locale) { $this->defaults['_locale'] = $locale; } From 5e3e22a3027bc0b2f03601d09dab75fbe4175621 Mon Sep 17 00:00:00 2001 From: Leo Feyer Date: Thu, 18 Nov 2021 10:57:18 +0100 Subject: [PATCH 6/6] Fix the CS check --- core-bundle/src/DependencyInjection/Attribute/AsPage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-bundle/src/DependencyInjection/Attribute/AsPage.php b/core-bundle/src/DependencyInjection/Attribute/AsPage.php index 7b188209ade..3e19ebe7bee 100644 --- a/core-bundle/src/DependencyInjection/Attribute/AsPage.php +++ b/core-bundle/src/DependencyInjection/Attribute/AsPage.php @@ -20,7 +20,7 @@ #[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class AsPage { - public function __construct(public ?string $type = null, public ?string $path = null, public array $requirements = [], public array $options = [], public array $defaults = [], public $methods = [], ?string $locale = null, ?string $format = null, public bool $contentComposition = true, public ?string $urlSuffix = null) + public function __construct(public ?string $type = null, public ?string $path = null, public array $requirements = [], public array $options = [], public array $defaults = [], public $methods = [], string $locale = null, string $format = null, public bool $contentComposition = true, public ?string $urlSuffix = null) { if (null !== $locale) { $this->defaults['_locale'] = $locale;