BundleExtension.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\HttpKernel\Bundle;
  11. use Symfony\Component\Config\Definition\Configuration;
  12. use Symfony\Component\Config\Definition\ConfigurationInterface;
  13. use Symfony\Component\DependencyInjection\ContainerBuilder;
  14. use Symfony\Component\DependencyInjection\Extension\ConfigurableExtensionInterface;
  15. use Symfony\Component\DependencyInjection\Extension\Extension;
  16. use Symfony\Component\DependencyInjection\Extension\ExtensionTrait;
  17. use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
  18. use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
  19. /**
  20. * @author Yonel Ceruto <yonelceruto@gmail.com>
  21. *
  22. * @internal
  23. */
  24. class BundleExtension extends Extension implements PrependExtensionInterface
  25. {
  26. use ExtensionTrait;
  27. public function __construct(
  28. private ConfigurableExtensionInterface $subject,
  29. private string $alias,
  30. ) {
  31. }
  32. public function getConfiguration(array $config, ContainerBuilder $container): ?ConfigurationInterface
  33. {
  34. return new Configuration($this->subject, $container, $this->getAlias());
  35. }
  36. public function getAlias(): string
  37. {
  38. return $this->alias;
  39. }
  40. public function prepend(ContainerBuilder $container): void
  41. {
  42. $callback = function (ContainerConfigurator $configurator) use ($container) {
  43. $this->subject->prependExtension($configurator, $container);
  44. };
  45. $this->executeConfiguratorCallback($container, $callback, $this->subject);
  46. }
  47. public function load(array $configs, ContainerBuilder $container): void
  48. {
  49. $config = $this->processConfiguration($this->getConfiguration([], $container), $configs);
  50. $callback = function (ContainerConfigurator $configurator) use ($config, $container) {
  51. $this->subject->loadExtension($config, $configurator, $container);
  52. };
  53. $this->executeConfiguratorCallback($container, $callback, $this->subject);
  54. }
  55. }