diff --git a/modules/form_decorator_example/src/FormDecorator/DependencyInjection.php b/modules/form_decorator_example/src/FormDecorator/DependencyInjection.php index 836ff8187ea7aa3cf2d72ba5a6275a7be57085d1..84638b0f75747446e3feb379f30142f2fe1653c5 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 b475fcd7277d9157999ba9e1632145a36eb1742a..4b26adf64c06433469ce1a9d79df125d8517b90f 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 4f35e16191924f52c5524bd83f43a342803f2061..430c4345307bb358f4f0d43fd14659f1aa1234f5 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 0000000000000000000000000000000000000000..e3136bb51da83e48525f31ac86b7b6aeb536a1e1 --- /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 8ffca4ce83dbbd206cf3f739954d72c24952f7f0..3f89280c40e81b3ec835c0cd59554c0b5fe36a09 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'); }