PluginManagerPass.php 970 B

12345678910111213141516171819202122232425262728
  1. <?php
  2. namespace Drupal\Core\Plugin;
  3. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  4. use Symfony\Component\DependencyInjection\ContainerBuilder;
  5. use Symfony\Component\DependencyInjection\Reference;
  6. /**
  7. * Registers plugin managers to the plugin.cache_clearer service.
  8. */
  9. class PluginManagerPass implements CompilerPassInterface {
  10. /**
  11. * {@inheritdoc}
  12. */
  13. public function process(ContainerBuilder $container) {
  14. $cache_clearer_definition = $container->getDefinition('plugin.cache_clearer');
  15. foreach ($container->getDefinitions() as $service_id => $definition) {
  16. if (strpos($service_id, 'plugin.manager.') === 0 || $definition->hasTag('plugin_manager_cache_clear')) {
  17. if (is_subclass_of($definition->getClass(), '\Drupal\Component\Plugin\Discovery\CachedDiscoveryInterface')) {
  18. $cache_clearer_definition->addMethodCall('addCachedDiscovery', [new Reference($service_id)]);
  19. }
  20. }
  21. }
  22. }
  23. }