mirror of
https://github.com/jbcr/SyliusElasticsearchPlugin.git
synced 2026-03-24 00:42:08 +01:00
145 lines
4.9 KiB
PHP
Executable File
145 lines
4.9 KiB
PHP
Executable File
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\BitBag\SyliusElasticsearchPlugin\Application;
|
|
|
|
use ProxyManager\Proxy\VirtualProxyInterface;
|
|
use PSS\SymfonyMockerContainer\DependencyInjection\MockerContainer;
|
|
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\DependencyInjection\ContainerInterface;
|
|
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
|
|
use Symfony\Component\Routing\RouteCollectionBuilder;
|
|
|
|
final class Kernel extends BaseKernel
|
|
{
|
|
use MicroKernelTrait;
|
|
|
|
private const CONFIG_EXTS = '.{php,xml,yaml,yml}';
|
|
|
|
private const IGNORED_SERVICES_DURING_CLEANUP = [
|
|
'kernel',
|
|
'http_kernel',
|
|
'liip_imagine.mime_type_guesser',
|
|
'liip_imagine.extension_guesser',
|
|
];
|
|
|
|
public function getCacheDir(): string
|
|
{
|
|
return $this->getProjectDir() . '/var/cache/' . $this->environment;
|
|
}
|
|
|
|
public function getLogDir(): string
|
|
{
|
|
return $this->getProjectDir() . '/var/log';
|
|
}
|
|
|
|
public function registerBundles(): iterable
|
|
{
|
|
$contents = require $this->getProjectDir() . '/config/bundles.php';
|
|
foreach ($contents as $class => $envs) {
|
|
if (isset($envs['all']) || isset($envs[$this->environment])) {
|
|
yield new $class();
|
|
}
|
|
}
|
|
}
|
|
|
|
public function shutdown(): void
|
|
{
|
|
if (!$this->isTestEnvironment()) {
|
|
parent::shutdown();
|
|
|
|
return;
|
|
}
|
|
|
|
if (false === $this->booted) {
|
|
return;
|
|
}
|
|
|
|
$container = $this->getContainer();
|
|
|
|
parent::shutdown();
|
|
|
|
$this->cleanupContainer($container);
|
|
}
|
|
|
|
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void
|
|
{
|
|
$container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php'));
|
|
$container->setParameter('container.dumper.inline_class_loader', true);
|
|
$confDir = $this->getProjectDir() . '/config';
|
|
|
|
$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');
|
|
}
|
|
|
|
protected function configureRoutes(RouteCollectionBuilder $routes): void
|
|
{
|
|
$confDir = $this->getProjectDir() . '/config';
|
|
|
|
$routes->import($confDir . '/{routes}/*' . self::CONFIG_EXTS, '/', 'glob');
|
|
$routes->import($confDir . '/{routes}/' . $this->environment . '/**/*' . self::CONFIG_EXTS, '/', 'glob');
|
|
$routes->import($confDir . '/{routes}' . self::CONFIG_EXTS, '/', 'glob');
|
|
}
|
|
|
|
protected function getContainerBaseClass(): string
|
|
{
|
|
if ($this->isTestEnvironment()) {
|
|
return MockerContainer::class;
|
|
}
|
|
|
|
return parent::getContainerBaseClass();
|
|
}
|
|
|
|
private function isTestEnvironment(): bool
|
|
{
|
|
return 0 === strpos($this->getEnvironment(), 'test');
|
|
}
|
|
|
|
/**
|
|
* Remove all container references from all loaded services
|
|
*/
|
|
private function cleanupContainer(ContainerInterface $container): void
|
|
{
|
|
$containerReflection = new \ReflectionObject($container);
|
|
$containerServicesPropertyReflection = $containerReflection->getProperty('services');
|
|
$containerServicesPropertyReflection->setAccessible(true);
|
|
|
|
$services = $containerServicesPropertyReflection->getValue($container) ?: [];
|
|
foreach ($services as $serviceId => $service) {
|
|
if (null === $service) {
|
|
continue;
|
|
}
|
|
|
|
if (in_array($serviceId, self::IGNORED_SERVICES_DURING_CLEANUP, true)) {
|
|
continue;
|
|
}
|
|
|
|
$serviceReflection = new \ReflectionObject($service);
|
|
|
|
if ($serviceReflection->implementsInterface(VirtualProxyInterface::class)) {
|
|
continue;
|
|
}
|
|
|
|
$servicePropertiesReflections = $serviceReflection->getProperties();
|
|
$servicePropertiesDefaultValues = $serviceReflection->getDefaultProperties();
|
|
foreach ($servicePropertiesReflections as $servicePropertyReflection) {
|
|
$defaultPropertyValue = null;
|
|
if (isset($servicePropertiesDefaultValues[$servicePropertyReflection->getName()])) {
|
|
$defaultPropertyValue = $servicePropertiesDefaultValues[$servicePropertyReflection->getName()];
|
|
}
|
|
|
|
$servicePropertyReflection->setAccessible(true);
|
|
$servicePropertyReflection->setValue($service, $defaultPropertyValue);
|
|
}
|
|
}
|
|
|
|
$containerServicesPropertyReflection->setValue($container, null);
|
|
}
|
|
}
|