Newer
Older
<?php
namespace Drupal\Core\Plugin\Discovery;
use Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator;
class ContainerDerivativeDiscoveryDecorator extends DerivativeDiscoveryDecorator {
/**
* {@inheritdoc}
*/
Dries Buytaert
committed
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) {
Dries Buytaert
committed
// 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 {
Dries Buytaert
committed
$this->derivers[$base_plugin_id] = new $class($base_plugin_id);
}
}
}
Dries Buytaert
committed
return $this->derivers[$base_plugin_id] ?: NULL;