diff --git a/core/lib/Drupal/Core/Plugin/Plugin/Validation/Constraint/PluginExistsConstraintValidator.php b/core/lib/Drupal/Core/Plugin/Plugin/Validation/Constraint/PluginExistsConstraintValidator.php index 2e9a8c33ae0ba41c8d15b953ac364fdc146518fc..b862bc339dfee8323b1609382907ae20f7a87be0 100644 --- a/core/lib/Drupal/Core/Plugin/Plugin/Validation/Constraint/PluginExistsConstraintValidator.php +++ b/core/lib/Drupal/Core/Plugin/Plugin/Validation/Constraint/PluginExistsConstraintValidator.php @@ -20,6 +20,10 @@ class PluginExistsConstraintValidator extends ConstraintValidator { public function validate(mixed $plugin_id, Constraint $constraint) { assert($constraint instanceof PluginExistsConstraint); + if ($plugin_id === NULL) { + return; + } + $definition = $constraint->pluginManager->getDefinition($plugin_id, FALSE); // Some plugin managers provide fallbacks. if ($constraint->pluginManager instanceof FallbackPluginManagerInterface) { diff --git a/core/tests/Drupal/KernelTests/Core/Plugin/PluginExistsConstraintValidatorTest.php b/core/tests/Drupal/KernelTests/Core/Plugin/PluginExistsConstraintValidatorTest.php index 6c34c8f033806140b8b1451e1bcadea998a225b5..3106db3269687a7de687447d4a223e0a3010f7f4 100644 --- a/core/tests/Drupal/KernelTests/Core/Plugin/PluginExistsConstraintValidatorTest.php +++ b/core/tests/Drupal/KernelTests/Core/Plugin/PluginExistsConstraintValidatorTest.php @@ -61,6 +61,11 @@ public function testValidation(): void { $violations = $data->validate(); $this->assertCount(1, $violations); $this->assertSame("The 'action_test_save_entity' plugin must implement or extend " . MenuInterface::class . '.', (string) $violations->get(0)->getMessage()); + + // No validation is attempted on a NULL value. + $data->setValue(NULL); + $violations = $data->validate(); + $this->assertCount(0, $violations); } }