ModifyServiceDefinitionsPass.php 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. namespace Drupal\Core\DependencyInjection\Compiler;
  3. use Drupal\Core\DrupalKernelInterface;
  4. use Drupal\Core\DependencyInjection\ServiceModifierInterface;
  5. use Symfony\Component\DependencyInjection\ContainerBuilder;
  6. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  7. /**
  8. * Passes the container to the alter() method of all service providers.
  9. */
  10. class ModifyServiceDefinitionsPass implements CompilerPassInterface {
  11. /**
  12. * {@inheritdoc}
  13. */
  14. public function process(ContainerBuilder $container) {
  15. if (!$container->has('kernel')) {
  16. return;
  17. }
  18. $kernel = $container->get('kernel');
  19. if (!($kernel instanceof DrupalKernelInterface)) {
  20. return;
  21. }
  22. $providers = $kernel->getServiceProviders('app');
  23. foreach ($providers as $provider) {
  24. if ($provider instanceof ServiceModifierInterface) {
  25. $provider->alter($container);
  26. }
  27. }
  28. $providers = $kernel->getServiceProviders('site');
  29. foreach ($providers as $provider) {
  30. if ($provider instanceof ServiceModifierInterface) {
  31. $provider->alter($container);
  32. }
  33. }
  34. }
  35. }