mirror of
https://github.com/jbcr/SyliusElasticsearchPlugin.git
synced 2026-03-24 00:42:08 +01:00
132 lines
4.5 KiB
PHP
Executable File
132 lines
4.5 KiB
PHP
Executable File
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\BitBag\SyliusElasticsearchPlugin\Application;
|
|
|
|
use BitBag\SyliusElasticsearchPlugin\CompilerPass\AuthenticationManagerPolyfillPass;
|
|
use PSS\SymfonyMockerContainer\DependencyInjection\MockerContainer;
|
|
use Sylius\Bundle\CoreBundle\Application\Kernel as SyliusKernel;
|
|
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
|
|
use Symfony\Component\Config\Loader\LoaderInterface;
|
|
use Symfony\Component\Config\Resource\FileResource;
|
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
use Symfony\Component\HttpKernel\Bundle\BundleInterface;
|
|
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
|
|
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
|
|
|
|
final class Kernel extends BaseKernel
|
|
{
|
|
use MicroKernelTrait;
|
|
|
|
private const CONFIG_EXTS = '.{php,xml,yaml,yml}';
|
|
|
|
public function getCacheDir(): string
|
|
{
|
|
return $this->getProjectDir() . '/var/cache/' . $this->environment;
|
|
}
|
|
|
|
public function getLogDir(): string
|
|
{
|
|
return $this->getProjectDir() . '/var/log';
|
|
}
|
|
|
|
public function registerBundles(): iterable
|
|
{
|
|
foreach ($this->getConfigurationDirectories() as $confDir) {
|
|
$bundlesFile = $confDir . '/bundles.php';
|
|
if (false === is_file($bundlesFile)) {
|
|
continue;
|
|
}
|
|
yield from $this->registerBundlesFromFile($bundlesFile);
|
|
}
|
|
}
|
|
|
|
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void
|
|
{
|
|
foreach ($this->getConfigurationDirectories() as $confDir) {
|
|
$bundlesFile = $confDir . '/bundles.php';
|
|
if (false === is_file($bundlesFile)) {
|
|
continue;
|
|
}
|
|
$container->addResource(new FileResource($bundlesFile));
|
|
}
|
|
|
|
$container->setParameter('container.dumper.inline_class_loader', true);
|
|
|
|
foreach ($this->getConfigurationDirectories() as $confDir) {
|
|
$this->loadContainerConfiguration($loader, $confDir);
|
|
}
|
|
}
|
|
|
|
protected function configureRoutes(RoutingConfigurator $routes): void
|
|
{
|
|
foreach ($this->getConfigurationDirectories() as $confDir) {
|
|
$this->loadRoutesConfiguration($routes, $confDir);
|
|
}
|
|
}
|
|
|
|
protected function getContainerBaseClass(): string
|
|
{
|
|
if ($this->isTestEnvironment() && class_exists(MockerContainer::class)) {
|
|
return MockerContainer::class;
|
|
}
|
|
|
|
return parent::getContainerBaseClass();
|
|
}
|
|
|
|
private function isTestEnvironment(): bool
|
|
{
|
|
return 0 === strpos($this->getEnvironment(), 'test');
|
|
}
|
|
|
|
private function loadContainerConfiguration(LoaderInterface $loader, string $confDir): void
|
|
{
|
|
$loader->load($confDir . '/{packages}/*' . self::CONFIG_EXTS, 'glob');
|
|
$loader->load($confDir . '/{packages}/' . $this->environment . '/**/*' . self::CONFIG_EXTS, 'glob');
|
|
$loader->load($confDir . '/{services}' . self::CONFIG_EXTS, 'glob');
|
|
$loader->load($confDir . '/{services}_' . $this->environment . self::CONFIG_EXTS, 'glob');
|
|
}
|
|
|
|
private function loadRoutesConfiguration(RoutingConfigurator $routes, string $confDir): void
|
|
{
|
|
$routes->import($confDir . '/{routes}/*' . self::CONFIG_EXTS);
|
|
$routes->import($confDir . '/{routes}/' . $this->environment . '/**/*' . self::CONFIG_EXTS);
|
|
$routes->import($confDir . '/{routes}' . self::CONFIG_EXTS);
|
|
}
|
|
|
|
/**
|
|
* @return BundleInterface[]
|
|
*/
|
|
private function registerBundlesFromFile(string $bundlesFile): iterable
|
|
{
|
|
$contents = require $bundlesFile;
|
|
foreach ($contents as $class => $envs) {
|
|
if (isset($envs['all']) || isset($envs[$this->environment])) {
|
|
yield new $class();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return string[]
|
|
*/
|
|
private function getConfigurationDirectories(): iterable
|
|
{
|
|
yield $this->getProjectDir() . '/config';
|
|
$syliusConfigDir = $this->getProjectDir() . '/config/sylius/' . SyliusKernel::MAJOR_VERSION . '.' . SyliusKernel::MINOR_VERSION;
|
|
if (is_dir($syliusConfigDir)) {
|
|
yield $syliusConfigDir;
|
|
}
|
|
$symfonyConfigDir = $this->getProjectDir() . '/config/symfony/' . BaseKernel::MAJOR_VERSION . '.' . BaseKernel::MINOR_VERSION;
|
|
if (is_dir($symfonyConfigDir)) {
|
|
yield $symfonyConfigDir;
|
|
}
|
|
}
|
|
|
|
protected function build(ContainerBuilder $container): void
|
|
{
|
|
$container->addCompilerPass(new AuthenticationManagerPolyfillPass());
|
|
}
|
|
}
|