function AttributeClassDiscoveryAutomatedProviders::prepareAttributeDefinition
Prepares the attribute definition.
Parameters
\Drupal\Component\Plugin\Attribute\AttributeInterface $attribute: The attribute derived from the plugin.
string $class: The class used for the plugin.
Throws
\LogicException When the attribute class does not allow for multiple providers.
File
-
core/
modules/ migrate/ src/ Plugin/ Discovery/ AttributeClassDiscoveryAutomatedProviders.php, line 32
Class
- AttributeClassDiscoveryAutomatedProviders
- Determines providers based on the namespaces of a class and its ancestors.
Namespace
Drupal\migrate\Plugin\DiscoveryCode
protected function prepareAttributeDefinition(AttributeInterface $attribute, string $class) : void {
if (!$attribute instanceof MultipleProviderAttributeInterface) {
throw new \LogicException('AttributeClassDiscoveryAutomatedProviders must implement ' . MultipleProviderAttributeInterface::class);
}
// @see Drupal\Component\Plugin\Discovery\AttributeClassDiscovery::prepareAttributeDefinition()
$attribute->setClass($class);
// Loop through all the parent classes and add their providers (which we
// infer by parsing their namespaces) to the $providers array.
$providers = $attribute->getProviders();
do {
$providers[] = $this->getProviderFromNamespace($class);
} while (($class = get_parent_class($class)) !== FALSE);
$providers = array_diff(array_unique(array_filter($providers)), [
'component',
]);
$attribute->setProviders($providers);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.