Loading core/lib/Drupal/Core/Validation/ConstraintFactory.php 0 → 100644 +38 −0 Changes for core/lib/Drupal/Core/Validation/ConstraintFactory.php: 38 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Drupal\Core\Validation; use Drupal\Core\Plugin\Factory\ContainerFactory; use Symfony\Component\Validator\Constraint; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; /** * Constraint plugin factory. * * Symfony Constraint plugins are created as Drupal plugins, but the default * plugin constructor is not compatible. */ class ConstraintFactory extends ContainerFactory { /** * {@inheritdoc} */ public function createInstance($plugin_id, array $configuration = []) { $plugin_definition = $this->discovery->getDefinition($plugin_id); $plugin_class = static::getPluginClass($plugin_id, $plugin_definition, $this->interface); // If the plugin provides a factory method, pass the container to it. if (is_subclass_of($plugin_class, ContainerFactoryPluginInterface::class)) { return $plugin_class::create(\Drupal::getContainer(), $configuration, $plugin_id, $plugin_definition); } // If the plugin is a Symfony Constraint, use the correct constructor. if (is_subclass_of($plugin_class, Constraint::class)) { return new $plugin_class($configuration); } // Otherwise, create the plugin as normal. return new $plugin_class($configuration, $plugin_id, $plugin_definition); } } core/lib/Drupal/Core/Validation/ConstraintManager.php +1 −0 Changes for core/lib/Drupal/Core/Validation/ConstraintManager.php: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ class ConstraintManager extends DefaultPluginManager { * The module handler to invoke the alter hook with. */ public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { $this->factory = new ConstraintFactory($this); parent::__construct('Plugin/Validation/Constraint', $namespaces, $module_handler, NULL, 'Drupal\Core\Validation\Annotation\Constraint'); $this->alterInfo('validation_constraint'); $this->setCacheBackend($cache_backend, 'validation_constraint_plugins'); Loading core/modules/system/tests/modules/entity_test/src/Plugin/Validation/Constraint/EntityTestContainerFactoryPlugin.php 0 → 100644 +31 −0 Changes for core/modules/system/tests/modules/entity_test/src/Plugin/Validation/Constraint/EntityTestContainerFactoryPlugin.php: 31 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Drupal\entity_test\Plugin\Validation\Constraint; use Drupal\Component\Plugin\PluginBase; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Symfony\Component\DependencyInjection\ContainerInterface; /** * A dummy constraint for testing \Drupal\Core\Validation\ConstraintFactory. * * @Constraint( * id = "EntityTestContainerFactoryPlugin", * label = @Translation("Constraint that implements ContainerFactoryPluginInterface."), * type = "entity" * ) */ class EntityTestContainerFactoryPlugin extends PluginBase implements ContainerFactoryPluginInterface { /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, ); } } core/modules/system/tests/modules/entity_test/src/Plugin/Validation/Constraint/EntityTestDefaultPlugin.php 0 → 100644 +16 −0 Changes for core/modules/system/tests/modules/entity_test/src/Plugin/Validation/Constraint/EntityTestDefaultPlugin.php: 16 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Drupal\entity_test\Plugin\Validation\Constraint; use Drupal\Component\Plugin\PluginBase; /** * A dummy constraint for testing \Drupal\Core\Validation\ConstraintFactory. * * @Constraint( * id = "EntityTestDefaultPlugin", * label = @Translation("Constraint that extends PluginBase."), * type = "entity" * ) */ class EntityTestDefaultPlugin extends PluginBase {} core/tests/Drupal/KernelTests/Core/Validation/ConstraintFactoryTest.php 0 → 100644 +48 −0 Changes for core/tests/Drupal/KernelTests/Core/Validation/ConstraintFactoryTest.php: 48 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Drupal\KernelTests\Core\Validation; use Drupal\Component\Plugin\PluginBase; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\KernelTests\KernelTestBase; use Symfony\Component\Validator\Constraint; /** * @coversDefaultClass \Drupal\Core\Validation\ConstraintFactory * * @group Validation */ class ConstraintFactoryTest extends KernelTestBase { /** * {@inheritdoc} */ protected static $modules = ['entity_test']; /** * @covers ::createInstance */ public function testCreateInstance() { $constraint_manager = \Drupal::typedDataManager()->getValidationConstraintManager(); // If the plugin is a \Symfony\Component\Validator\Constraint, they will be // created first. $this->assertInstanceOf(Constraint::class, $constraint_manager->create('Uuid', [])); // If the plugin implements the // \Drupal\Core\Plugin\ContainerFactoryPluginInterface, they will be created // second. $container_factory_plugin = $constraint_manager->create('EntityTestContainerFactoryPlugin', []); $this->assertNotInstanceOf(Constraint::class, $container_factory_plugin); $this->assertInstanceOf(ContainerFactoryPluginInterface::class, $container_factory_plugin); // Plugins that are not a \Symfony\Component\Validator\Constraint or do not // implement the \Drupal\Core\Plugin\ContainerFactoryPluginInterface are // created last. $default_plugin = $constraint_manager->create('EntityTestDefaultPlugin', []); $this->assertNotInstanceOf(Constraint::class, $default_plugin); $this->assertNotInstanceOf(ContainerFactoryPluginInterface::class, $default_plugin); $this->assertInstanceOf(PluginBase::class, $default_plugin); } } Loading
core/lib/Drupal/Core/Validation/ConstraintFactory.php 0 → 100644 +38 −0 Changes for core/lib/Drupal/Core/Validation/ConstraintFactory.php: 38 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Drupal\Core\Validation; use Drupal\Core\Plugin\Factory\ContainerFactory; use Symfony\Component\Validator\Constraint; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; /** * Constraint plugin factory. * * Symfony Constraint plugins are created as Drupal plugins, but the default * plugin constructor is not compatible. */ class ConstraintFactory extends ContainerFactory { /** * {@inheritdoc} */ public function createInstance($plugin_id, array $configuration = []) { $plugin_definition = $this->discovery->getDefinition($plugin_id); $plugin_class = static::getPluginClass($plugin_id, $plugin_definition, $this->interface); // If the plugin provides a factory method, pass the container to it. if (is_subclass_of($plugin_class, ContainerFactoryPluginInterface::class)) { return $plugin_class::create(\Drupal::getContainer(), $configuration, $plugin_id, $plugin_definition); } // If the plugin is a Symfony Constraint, use the correct constructor. if (is_subclass_of($plugin_class, Constraint::class)) { return new $plugin_class($configuration); } // Otherwise, create the plugin as normal. return new $plugin_class($configuration, $plugin_id, $plugin_definition); } }
core/lib/Drupal/Core/Validation/ConstraintManager.php +1 −0 Changes for core/lib/Drupal/Core/Validation/ConstraintManager.php: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ class ConstraintManager extends DefaultPluginManager { * The module handler to invoke the alter hook with. */ public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { $this->factory = new ConstraintFactory($this); parent::__construct('Plugin/Validation/Constraint', $namespaces, $module_handler, NULL, 'Drupal\Core\Validation\Annotation\Constraint'); $this->alterInfo('validation_constraint'); $this->setCacheBackend($cache_backend, 'validation_constraint_plugins'); Loading
core/modules/system/tests/modules/entity_test/src/Plugin/Validation/Constraint/EntityTestContainerFactoryPlugin.php 0 → 100644 +31 −0 Changes for core/modules/system/tests/modules/entity_test/src/Plugin/Validation/Constraint/EntityTestContainerFactoryPlugin.php: 31 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Drupal\entity_test\Plugin\Validation\Constraint; use Drupal\Component\Plugin\PluginBase; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Symfony\Component\DependencyInjection\ContainerInterface; /** * A dummy constraint for testing \Drupal\Core\Validation\ConstraintFactory. * * @Constraint( * id = "EntityTestContainerFactoryPlugin", * label = @Translation("Constraint that implements ContainerFactoryPluginInterface."), * type = "entity" * ) */ class EntityTestContainerFactoryPlugin extends PluginBase implements ContainerFactoryPluginInterface { /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, ); } }
core/modules/system/tests/modules/entity_test/src/Plugin/Validation/Constraint/EntityTestDefaultPlugin.php 0 → 100644 +16 −0 Changes for core/modules/system/tests/modules/entity_test/src/Plugin/Validation/Constraint/EntityTestDefaultPlugin.php: 16 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Drupal\entity_test\Plugin\Validation\Constraint; use Drupal\Component\Plugin\PluginBase; /** * A dummy constraint for testing \Drupal\Core\Validation\ConstraintFactory. * * @Constraint( * id = "EntityTestDefaultPlugin", * label = @Translation("Constraint that extends PluginBase."), * type = "entity" * ) */ class EntityTestDefaultPlugin extends PluginBase {}
core/tests/Drupal/KernelTests/Core/Validation/ConstraintFactoryTest.php 0 → 100644 +48 −0 Changes for core/tests/Drupal/KernelTests/Core/Validation/ConstraintFactoryTest.php: 48 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Drupal\KernelTests\Core\Validation; use Drupal\Component\Plugin\PluginBase; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\KernelTests\KernelTestBase; use Symfony\Component\Validator\Constraint; /** * @coversDefaultClass \Drupal\Core\Validation\ConstraintFactory * * @group Validation */ class ConstraintFactoryTest extends KernelTestBase { /** * {@inheritdoc} */ protected static $modules = ['entity_test']; /** * @covers ::createInstance */ public function testCreateInstance() { $constraint_manager = \Drupal::typedDataManager()->getValidationConstraintManager(); // If the plugin is a \Symfony\Component\Validator\Constraint, they will be // created first. $this->assertInstanceOf(Constraint::class, $constraint_manager->create('Uuid', [])); // If the plugin implements the // \Drupal\Core\Plugin\ContainerFactoryPluginInterface, they will be created // second. $container_factory_plugin = $constraint_manager->create('EntityTestContainerFactoryPlugin', []); $this->assertNotInstanceOf(Constraint::class, $container_factory_plugin); $this->assertInstanceOf(ContainerFactoryPluginInterface::class, $container_factory_plugin); // Plugins that are not a \Symfony\Component\Validator\Constraint or do not // implement the \Drupal\Core\Plugin\ContainerFactoryPluginInterface are // created last. $default_plugin = $constraint_manager->create('EntityTestDefaultPlugin', []); $this->assertNotInstanceOf(Constraint::class, $default_plugin); $this->assertNotInstanceOf(ContainerFactoryPluginInterface::class, $default_plugin); $this->assertInstanceOf(PluginBase::class, $default_plugin); } }