[XML2PHP] StateMachineAbstraction (#19063)
Some checks are pending
Continuous Integration (Minimal) / Static checks (push) Waiting to run
Continuous Integration (Minimal) / Tests (MariaDB) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Frontend (push) Blocked by required conditions
Continuous Integration (Minimal) / Packages (push) Blocked by required conditions

| Q               | A
|-----------------|-----
| Branch?         | 2.3
| Bug fix?        | no
| New feature?    | no
| BC breaks?      | no
| Deprecations? | no<!-- don't forget to update the UPGRADE-*.md file
-->
| Related tickets | extracted from
https://github.com/Sylius/Sylius/pull/18803, partially
https://github.com/Sylius/Sylius/issues/18490
| License         | MIT

<!--
 - Bug fixes must be submitted against the 2.2 branch
 - Features and deprecations must be submitted against the 2.3 branch
 - Make sure that the correct base branch is set

To be sure you are not breaking any Backward Compatibilities, check the
documentation:

https://docs.sylius.com/en/latest/book/organization/backward-compatibility-promise.html
-->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **Refactor**
* Migrated state machine service configurations from XML format to
PHP-based configuration files for improved maintainability and
consistency.
* Updated the service loader to support PHP file-based configuration
instead of XML.

* **Tests**
* Streamlined test coverage to focus on YAML-based service configuration
validation paths.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Kamil Grygierzec 2026-06-17 13:12:49 +02:00 committed by GitHub
commit 499d84b607
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 84 additions and 84 deletions

View file

@ -0,0 +1,50 @@
<?php
/*
* This file is part of the Sylius package.
*
* (c) Sylius Sp. z o.o.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Sylius\Abstraction\StateMachine\CompositeStateMachine;
use Sylius\Abstraction\StateMachine\StateMachineInterface;
use Sylius\Abstraction\StateMachine\SymfonyWorkflowAdapter;
use Sylius\Abstraction\StateMachine\Twig\StateMachineExtension;
return static function (ContainerConfigurator $container): void {
$services = $container->services();
$services->defaults()->public();
$services->set('sylius_abstraction.state_machine', CompositeStateMachine::class)
->args([
tagged_iterator('sylius.state_machine', indexAttribute: 'key'),
'%sylius_abstraction.state_machine.default_adapter%',
'%sylius_abstraction.state_machine.graphs_to_adapters_mapping%',
]);
$services->alias(StateMachineInterface::class . ' $compositeStateMachine', 'sylius_abstraction.state_machine.composite');
$services->alias('sylius_abstraction.state_machine.composite', 'sylius_abstraction.state_machine');
$services->alias(StateMachineInterface::class, 'sylius_abstraction.state_machine');
$services->set('sylius_abstraction.state_machine.adapter.symfony_workflow', SymfonyWorkflowAdapter::class)
->args([
service('workflow.registry'),
])
->tag('sylius.state_machine', ['key' => 'symfony_workflow']);
$services->alias(StateMachineInterface::class . ' $symfonyWorkflow', 'sylius_abstraction.state_machine.adapter.symfony_workflow');
$services->set('sylius_abstraction.twig.extension.state_machine', StateMachineExtension::class)
->args([
service('sylius_abstraction.state_machine'),
])
->tag('twig.extension');
};

View file

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This file is part of the Sylius package.
(c) Sylius Sp. z o.o.
For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
-->
<container
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"
>
<services>
<defaults public="true" />
<service id="sylius_abstraction.state_machine" class="Sylius\Abstraction\StateMachine\CompositeStateMachine">
<argument type="tagged_iterator" tag="sylius.state_machine" index-by="key" />
<argument>%sylius_abstraction.state_machine.default_adapter%</argument>
<argument>%sylius_abstraction.state_machine.graphs_to_adapters_mapping%</argument>
</service>
<service id="Sylius\Abstraction\StateMachine\StateMachineInterface $compositeStateMachine" alias="sylius_abstraction.state_machine.composite" />
<service id="sylius_abstraction.state_machine.composite" alias="sylius_abstraction.state_machine" />
<service id="Sylius\Abstraction\StateMachine\StateMachineInterface" alias="sylius_abstraction.state_machine" />
<service id="sylius_abstraction.state_machine.adapter.symfony_workflow" class="Sylius\Abstraction\StateMachine\SymfonyWorkflowAdapter">
<argument type="service" id="workflow.registry" />
<tag name="sylius.state_machine" key="symfony_workflow" />
</service>
<service id="Sylius\Abstraction\StateMachine\StateMachineInterface $symfonyWorkflow" alias="sylius_abstraction.state_machine.adapter.symfony_workflow" />
<service id="sylius_abstraction.twig.extension.state_machine" class="Sylius\Abstraction\StateMachine\Twig\StateMachineExtension">
<argument type="service" id="sylius_abstraction.state_machine" />
<tag name="twig.extension" />
</service>
</services>
</container>

View file

@ -0,0 +1,30 @@
<?php
/*
* This file is part of the Sylius package.
*
* (c) Sylius Sp. z o.o.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Sylius\Abstraction\StateMachine\StateMachineInterface;
use Sylius\Abstraction\StateMachine\WinzouStateMachineAdapter;
return static function (ContainerConfigurator $container): void {
$services = $container->services();
$services->defaults()->public();
$services->set('sylius_abstraction.state_machine.adapter.winzou_state_machine', WinzouStateMachineAdapter::class)
->args([
service('sm.factory'),
])
->tag('sylius.state_machine', ['key' => 'winzou_state_machine']);
$services->alias(StateMachineInterface::class . ' $winzouStateMachine', 'sylius_abstraction.state_machine.adapter.winzou_state_machine');
};

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This file is part of the Sylius package.
(c) Sylius Sp. z o.o.
For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
-->
<container
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"
>
<services>
<defaults public="true" />
<service id="sylius_abstraction.state_machine.adapter.winzou_state_machine" class="Sylius\Abstraction\StateMachine\WinzouStateMachineAdapter">
<argument type="service" id="sm.factory" />
<tag name="sylius.state_machine" key="winzou_state_machine" />
</service>
<service id="Sylius\Abstraction\StateMachine\StateMachineInterface $winzouStateMachine" alias="sylius_abstraction.state_machine.adapter.winzou_state_machine" />
</services>
</container>

View file

@ -16,7 +16,7 @@ namespace Sylius\Abstraction\StateMachine\DependencyInjection;
use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension; use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
final class SyliusStateMachineAbstractionExtension extends Extension final class SyliusStateMachineAbstractionExtension extends Extension
{ {
@ -24,13 +24,13 @@ final class SyliusStateMachineAbstractionExtension extends Extension
{ {
$config = $this->processConfiguration($this->getConfiguration([], $container), $configs); $config = $this->processConfiguration($this->getConfiguration([], $container), $configs);
$loader = new XmlFileLoader($container, new FileLocator(dirname(__DIR__, 2) . '/config/')); $loader = new PhpFileLoader($container, new FileLocator(dirname(__DIR__, 2) . '/config/'));
$loader->load('services.xml'); $loader->load('services.php');
if ($container->hasParameter('kernel.bundles')) { if ($container->hasParameter('kernel.bundles')) {
$bundles = $container->getParameter('kernel.bundles'); $bundles = $container->getParameter('kernel.bundles');
if (array_key_exists('winzouStateMachineBundle', $bundles)) { if (array_key_exists('winzouStateMachineBundle', $bundles)) {
$loader->load('services/integrations/winzou.xml'); $loader->load('services/integrations/winzou.php');
} }
} }

View file

@ -24,7 +24,6 @@ use Sylius\Component\Payment\Model\PaymentRequestInterface;
use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Tests\Sylius\Bundle\PaymentBundle\Stub\GatewayConfigurationTypeStub; use Tests\Sylius\Bundle\PaymentBundle\Stub\GatewayConfigurationTypeStub;
use Tests\Sylius\Bundle\PaymentBundle\Stub\NotifyPaymentProviderStub; use Tests\Sylius\Bundle\PaymentBundle\Stub\NotifyPaymentProviderStub;
@ -238,10 +237,6 @@ final class SyliusPaymentExtensionTest extends AbstractExtensionTestCase
YamlFileLoader::class, YamlFileLoader::class,
'command_provider.yaml', 'command_provider.yaml',
]; ];
yield 'Load XML' => [
XmlFileLoader::class,
'command_provider.xml',
];
} }
public static function getHttpResponseProviderLoader(): iterable public static function getHttpResponseProviderLoader(): iterable
@ -250,10 +245,6 @@ final class SyliusPaymentExtensionTest extends AbstractExtensionTestCase
YamlFileLoader::class, YamlFileLoader::class,
'http_response_provider.yaml', 'http_response_provider.yaml',
]; ];
yield 'Load XML' => [
XmlFileLoader::class,
'http_response_provider.xml',
];
} }
protected function getContainerExtensions(): array protected function getContainerExtensions(): array