[Theming] Move prepending sylius_theme from Core to Shop extension

This commit is contained in:
Grzegorz Sadowski 2024-10-04 13:38:32 +02:00
parent 226116b905
commit a9f021562c
No known key found for this signature in database
GPG key ID: EF87FF4E6E3BD364
3 changed files with 39 additions and 17 deletions

View file

@ -100,7 +100,7 @@ final class SyliusCoreExtension extends AbstractResourceExtension implements Pre
$config = $container->getExtensionConfig($this->getAlias());
$config = $this->processConfiguration($this->getConfiguration([], $container), $config);
$this->prependSyliusThemeBundle($container, $config['driver']);
$this->prependDefaultDriver($container, $config['driver']);
$this->prependHwiOauth($container);
$this->prependDoctrineMigrations($container);
$this->prependJmsSerializerIfAdminApiBundleIsNotPresent($container);
@ -122,6 +122,15 @@ final class SyliusCoreExtension extends AbstractResourceExtension implements Pre
return [];
}
private function prependDefaultDriver(ContainerBuilder $container, string $driver): void
{
foreach ($container->getExtensions() as $name => $extension) {
if (in_array($name, self::$bundles, true)) {
$container->prependExtensionConfig($name, ['driver' => $driver]);
}
}
}
private function prependHwiOauth(ContainerBuilder $container): void
{
if (!$container->hasExtension('hwi_oauth')) {
@ -133,21 +142,6 @@ final class SyliusCoreExtension extends AbstractResourceExtension implements Pre
$loader->load('services/integrations/hwi_oauth.xml');
}
private function prependSyliusThemeBundle(ContainerBuilder $container, string $driver): void
{
if (!$container->hasExtension('sylius_theme')) {
return;
}
foreach ($container->getExtensions() as $name => $extension) {
if (in_array($name, self::$bundles, true)) {
$container->prependExtensionConfig($name, ['driver' => $driver]);
}
}
$container->prependExtensionConfig('sylius_theme', ['context' => 'sylius.theme.context.channel_based']);
}
private function prependJmsSerializerIfAdminApiBundleIsNotPresent(ContainerBuilder $container): void
{
if (!$container->hasExtension('jms_serializer')) {

View file

@ -20,12 +20,13 @@ use Sylius\Bundle\ShopBundle\Locale\LocaleSwitcherInterface;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\HttpFoundation\RequestMatcher\PathRequestMatcher;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
final class SyliusShopExtension extends Extension
final class SyliusShopExtension extends Extension implements PrependExtensionInterface
{
public function load(array $configs, ContainerBuilder $container): void
{
@ -44,6 +45,11 @@ final class SyliusShopExtension extends Extension
$this->configureCheckoutResolverIfNeeded($config['checkout_resolver'], $container);
}
public function prepend(ContainerBuilder $container): void
{
$this->prependSyliusThemeBundle($container);
}
private function configureCheckoutResolverIfNeeded(array $config, ContainerBuilder $container): void
{
if (!$config['enabled']) {
@ -99,4 +105,13 @@ final class SyliusShopExtension extends Extension
return $checkoutRedirectListener;
}
private function prependSyliusThemeBundle(ContainerBuilder $container): void
{
if (!$container->hasExtension('sylius_theme')) {
return;
}
$container->prependExtensionConfig('sylius_theme', ['context' => 'sylius.theme.context.channel_based']);
}
}

View file

@ -17,6 +17,7 @@ use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
use Sylius\Bundle\ShopBundle\DependencyInjection\SyliusShopExtension;
use Sylius\Bundle\ShopBundle\Locale\StorageBasedLocaleSwitcher;
use Sylius\Bundle\ShopBundle\Locale\UrlBasedLocaleSwitcher;
use Sylius\Bundle\ThemeBundle\DependencyInjection\SyliusThemeExtension;
final class SyliusShopExtensionTest extends AbstractExtensionTestCase
{
@ -132,6 +133,18 @@ final class SyliusShopExtensionTest extends AbstractExtensionTestCase
$this->assertContainerBuilderHasParameter('sylius_shop.firewall_context_name', 'myshopfirewall');
}
/** @test */
public function it_prepends_sylius_theme_configuration_with_channel_based_context(): void
{
$this->container->registerExtension(new SyliusThemeExtension());
$this->load();
$syliusThemeConfig = $this->container->getExtensionConfig('sylius_theme')[0];
$this->assertSame('sylius.theme.context.channel_based', $syliusThemeConfig['context']);
}
protected function getContainerExtensions(): array
{
return [