protected function ContainerDerivativeDiscoveryDecorator::getDeriver in Drupal 9
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Plugin/Discovery/ContainerDerivativeDiscoveryDecorator.php \Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator::getDeriver()
Gets a deriver for a base plugin.
Parameters
string $base_plugin_id: The base plugin id of the plugin.
mixed $base_definition: The base plugin definition to build derivatives.
Return value
\Drupal\Component\Plugin\Derivative\DeriverInterface|null A DerivativeInterface or NULL if none exists for the plugin.
Throws
\Drupal\Component\Plugin\Exception\InvalidDeriverException Thrown if the 'deriver' class specified in the plugin definition does not implement \Drupal\Component\Plugin\Derivative\DeriverInterface.
Overrides DerivativeDiscoveryDecorator::getDeriver
File
- core/
lib/ Drupal/ Core/ Plugin/ Discovery/ ContainerDerivativeDiscoveryDecorator.php, line 17
Class
- ContainerDerivativeDiscoveryDecorator
- Injects dependencies into derivers if they use ContainerDeriverInterface.
Namespace
Drupal\Core\Plugin\DiscoveryCode
protected function getDeriver($base_plugin_id, $base_definition) {
if (!isset($this->derivers[$base_plugin_id])) {
$this->derivers[$base_plugin_id] = FALSE;
$class = $this
->getDeriverClass($base_definition);
if ($class) {
// If the deriver provides a factory method, pass the container to it.
if (is_subclass_of($class, '\\Drupal\\Core\\Plugin\\Discovery\\ContainerDeriverInterface')) {
/** @var \Drupal\Core\Plugin\Discovery\ContainerDeriverInterface $class */
$this->derivers[$base_plugin_id] = $class::create(\Drupal::getContainer(), $base_plugin_id);
}
else {
$this->derivers[$base_plugin_id] = new $class($base_plugin_id);
}
}
}
return $this->derivers[$base_plugin_id] ?: NULL;
}