ContainerDerivativeDiscoveryDecorator.php 1.0 KB

123456789101112131415161718192021222324252627282930
  1. <?php
  2. namespace Drupal\Core\Plugin\Discovery;
  3. use Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator;
  4. class ContainerDerivativeDiscoveryDecorator extends DerivativeDiscoveryDecorator {
  5. /**
  6. * {@inheritdoc}
  7. */
  8. protected function getDeriver($base_plugin_id, $base_definition) {
  9. if (!isset($this->derivers[$base_plugin_id])) {
  10. $this->derivers[$base_plugin_id] = FALSE;
  11. $class = $this->getDeriverClass($base_definition);
  12. if ($class) {
  13. // If the deriver provides a factory method, pass the container to it.
  14. if (is_subclass_of($class, '\Drupal\Core\Plugin\Discovery\ContainerDeriverInterface')) {
  15. /** @var \Drupal\Core\Plugin\Discovery\ContainerDeriverInterface $class */
  16. $this->derivers[$base_plugin_id] = $class::create(\Drupal::getContainer(), $base_plugin_id);
  17. }
  18. else {
  19. $this->derivers[$base_plugin_id] = new $class($base_plugin_id);
  20. }
  21. }
  22. }
  23. return $this->derivers[$base_plugin_id] ?: NULL;
  24. }
  25. }