From d7f723d6ad235c50d030b4d78e23b2ebbe0648c9 Mon Sep 17 00:00:00 2001 From: Harlor <harlor@web.de> Date: Fri, 31 Jan 2025 15:18:38 +0100 Subject: [PATCH] Introduce form decorator attribute plugins --- .../src/FormDecorator/DependencyInjection.php | 6 ++-- .../src/FormDecorator/NodeCreatedDate.php | 6 ++-- .../src/FormDecorator/ValidateOnly.php | 8 ++--- src/Attribute/FormDecorator.php | 30 +++++++++++++++++++ src/FormDecoratorPluginManager.php | 5 ++-- 5 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 src/Attribute/FormDecorator.php diff --git a/modules/form_decorator_example/src/FormDecorator/DependencyInjection.php b/modules/form_decorator_example/src/FormDecorator/DependencyInjection.php index 836ff81..84638b0 100644 --- a/modules/form_decorator_example/src/FormDecorator/DependencyInjection.php +++ b/modules/form_decorator_example/src/FormDecorator/DependencyInjection.php @@ -9,15 +9,13 @@ use Drupal\form_decorator\FormDecoratorBase; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\form_decorator\Attribute\FormDecorator; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Adds dependency injection to the user login form. - * - * @FormDecorator( - * hook = "form_user_login_form_alter" - * ) */ +#[FormDecorator('form_user_login_form_alter')] final class DependencyInjection extends FormDecoratorBase implements ContainerFactoryPluginInterface { use StringTranslationTrait; diff --git a/modules/form_decorator_example/src/FormDecorator/NodeCreatedDate.php b/modules/form_decorator_example/src/FormDecorator/NodeCreatedDate.php index b475fcd..4b26adf 100644 --- a/modules/form_decorator_example/src/FormDecorator/NodeCreatedDate.php +++ b/modules/form_decorator_example/src/FormDecorator/NodeCreatedDate.php @@ -7,15 +7,13 @@ namespace Drupal\form_decorator_example\FormDecorator; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Form\FormStateInterface; use Drupal\form_decorator\FormDecoratorBase; +use Drupal\form_decorator\Attribute\FormDecorator; use Drupal\Core\StringTranslation\StringTranslationTrait; /** * Adds a created date picker to the node form. - * - * @FormDecorator( - * hook = "form_node_form_alter" - * ) */ +#[FormDecorator('form_node_form_alter')] final class NodeCreatedDate extends FormDecoratorBase { use StringTranslationTrait; diff --git a/modules/form_decorator_example/src/FormDecorator/ValidateOnly.php b/modules/form_decorator_example/src/FormDecorator/ValidateOnly.php index 4f35e16..430c434 100644 --- a/modules/form_decorator_example/src/FormDecorator/ValidateOnly.php +++ b/modules/form_decorator_example/src/FormDecorator/ValidateOnly.php @@ -5,16 +5,14 @@ declare(strict_types=1); namespace Drupal\form_decorator_example\FormDecorator; use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\form_decorator\FormDecoratorBase; +use Drupal\form_decorator\Attribute\FormDecorator; +use Drupal\Core\StringTranslation\StringTranslationTrait; /** * Provides additional validation for the user registration form. - * - * @FormDecorator( - * hook = "form_user_register_form_alter" - * ) */ +#[FormDecorator('form_user_register_form_alter')] final class ValidateOnly extends FormDecoratorBase { use StringTranslationTrait; diff --git a/src/Attribute/FormDecorator.php b/src/Attribute/FormDecorator.php new file mode 100644 index 0000000..e3136bb --- /dev/null +++ b/src/Attribute/FormDecorator.php @@ -0,0 +1,30 @@ +<?php + +namespace Drupal\form_decorator\Attribute; + +use Drupal\Component\Plugin\Attribute\Plugin; + +/** + * The FormDecorator attribute. + */ +#[\Attribute(\Attribute::TARGET_CLASS)] +class FormDecorator extends Plugin { + + /** + * Constructs a FormDecorator attribute. + * + * @param string $hook + * The form alter hook. + */ + public function __construct( + public readonly string $hook = '', + ) {} + + /** + * {@inheritdoc} + */ + public function getId():string { + return $this->getClass(); + } + +} diff --git a/src/FormDecoratorPluginManager.php b/src/FormDecoratorPluginManager.php index 8ffca4c..3f89280 100644 --- a/src/FormDecoratorPluginManager.php +++ b/src/FormDecoratorPluginManager.php @@ -7,7 +7,8 @@ namespace Drupal\form_decorator; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Plugin\DefaultPluginManager; use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\form_decorator\Annotation\FormDecorator; +use Drupal\form_decorator\Attribute\FormDecorator; +use Drupal\form_decorator\Annotation\FormDecorator as FormDecoratorAnnotation; /** * FormDecorator plugin manager. @@ -18,7 +19,7 @@ final class FormDecoratorPluginManager extends DefaultPluginManager { * Constructs a new \Drupal\form_decorator\FormDecoratorPluginManager object. */ public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { - parent::__construct('FormDecorator', $namespaces, $module_handler, FormDecoratorInterface::class, FormDecorator::class); + parent::__construct('FormDecorator', $namespaces, $module_handler, FormDecoratorInterface::class, FormDecorator::class, FormDecoratorAnnotation::class); $this->alterInfo('form_decorator_info'); $this->setCacheBackend($cache_backend, 'form_decorator_plugins'); } -- GitLab