function ContainerDerivativeDiscoveryDecorator::getDeriver

Same name in other branches
  1. 9 core/lib/Drupal/Core/Plugin/Discovery/ContainerDerivativeDiscoveryDecorator.php \Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator::getDeriver()
  2. 8.9.x core/lib/Drupal/Core/Plugin/Discovery/ContainerDerivativeDiscoveryDecorator.php \Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator::getDeriver()
  3. 11.x core/lib/Drupal/Core/Plugin/Discovery/ContainerDerivativeDiscoveryDecorator.php \Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator::getDeriver()

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\Discovery

Code

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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.