src/Kernel.php line 97

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Sylius package.
  4.  *
  5.  * (c) Paweł Jędrzejewski
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. declare(strict_types=1);
  11. namespace App;
  12. use PSS\SymfonyMockerContainer\DependencyInjection\MockerContainer;
  13. use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
  14. use Symfony\Component\Config\Loader\DelegatingLoader;
  15. use Symfony\Component\Config\Loader\LoaderInterface;
  16. use Symfony\Component\Config\Loader\LoaderResolver;
  17. use Symfony\Component\Config\Resource\FileResource;
  18. use Symfony\Component\DependencyInjection\ContainerBuilder;
  19. use Symfony\Component\DependencyInjection\ContainerInterface;
  20. use Symfony\Component\DependencyInjection\Loader\ClosureLoader;
  21. use Symfony\Component\DependencyInjection\Loader\DirectoryLoader;
  22. use Symfony\Component\DependencyInjection\Loader\GlobFileLoader;
  23. use Symfony\Component\DependencyInjection\Loader\IniFileLoader;
  24. use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
  25. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  26. use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
  27. use Symfony\Component\HttpKernel\Config\FileLocator;
  28. use Symfony\Component\HttpKernel\Kernel as BaseKernel;
  29. use Symfony\Component\Routing\RouteCollectionBuilder;
  30. use Webmozart\Assert\Assert;
  31. final class Kernel extends BaseKernel
  32. {
  33.     use MicroKernelTrait;
  34.     private const CONFIG_EXTS '.{php,xml,yaml,yml}';
  35.     public function getCacheDir(): string
  36.     {
  37.         return $this->getProjectDir() . '/var/cache/' $this->environment;
  38.     }
  39.     public function getLogDir(): string
  40.     {
  41.         return $this->getProjectDir() . '/var/log';
  42.     }
  43.     public function registerBundles(): iterable
  44.     {
  45.         $contents = require $this->getProjectDir() . '/config/bundles.php';
  46.         foreach ($contents as $class => $envs) {
  47.             if (isset($envs['all']) || isset($envs[$this->environment])) {
  48.                 yield new $class();
  49.             }
  50.         }
  51.     }
  52.     protected function configureContainer(ContainerBuilder $containerLoaderInterface $loader): void
  53.     {
  54.         $container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php'));
  55.         $container->setParameter('container.dumper.inline_class_loader'true);
  56.         $confDir $this->getProjectDir() . '/config';
  57.         $loader->load($confDir '/{packages}/*' self::CONFIG_EXTS'glob');
  58.         $loader->load($confDir '/{packages}/' $this->environment '/**/*' self::CONFIG_EXTS'glob');
  59.         $loader->load($confDir '/{services}' self::CONFIG_EXTS'glob');
  60.         $loader->load($confDir '/{services}_' $this->environment self::CONFIG_EXTS'glob');
  61.     }
  62.     protected function configureRoutes(RouteCollectionBuilder $routes): void
  63.     {
  64.         $confDir $this->getProjectDir() . '/config';
  65.         $routes->import($confDir '/{routes}/*' self::CONFIG_EXTS'/''glob');
  66.         $routes->import($confDir '/{routes}/' $this->environment '/**/*' self::CONFIG_EXTS'/''glob');
  67.         $routes->import($confDir '/{routes}' self::CONFIG_EXTS'/''glob');
  68.     }
  69.     protected function getContainerBaseClass(): string
  70.     {
  71.         if ($this->isTestEnvironment()) {
  72.             return MockerContainer::class;
  73.         }
  74.         return parent::getContainerBaseClass();
  75.     }
  76.     protected function getContainerLoader(ContainerInterface $container): LoaderInterface
  77.     {
  78.         /** @var ContainerBuilder $container */
  79.         Assert::isInstanceOf($containerContainerBuilder::class);
  80.         $locator = new FileLocator($this$this->getRootDir() . '/Resources');
  81.         $resolver = new LoaderResolver([
  82.             new XmlFileLoader($container$locator),
  83.             new YamlFileLoader($container$locator),
  84.             new IniFileLoader($container$locator),
  85.             new PhpFileLoader($container$locator),
  86.             new GlobFileLoader($container$locator),
  87.             new DirectoryLoader($container$locator),
  88.             new ClosureLoader($container),
  89.         ]);
  90.         return new DelegatingLoader($resolver);
  91.     }
  92.     private function isTestEnvironment(): bool
  93.     {
  94.         return === strpos($this->getEnvironment(), 'test');
  95.     }
  96. }