diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2c685c5..9f7b800 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -25,6 +25,13 @@ jobs:
symfony-version: # https://symfony.com/releases
- "6.4"
- "7.4"
+ - "8.1"
+ exclude:
+ # Symfony 8 requires PHP 8.4 or higher
+ - php-version: "8.2"
+ symfony-version: "8.1"
+ - php-version: "8.3"
+ symfony-version: "8.1"
steps:
- name: "Checkout"
uses: "actions/checkout@v7"
diff --git a/composer.json b/composer.json
index 6db0c1f..c24e100 100644
--- a/composer.json
+++ b/composer.json
@@ -36,10 +36,10 @@
}
],
"require": {
- "php": "^7.4 || ^8.0",
+ "php": "^8.2",
"broadway/broadway": "^2.2.1",
- "symfony/console": "^4.4 || ^5.3 || ^6.0 || ^7.0",
- "symfony/http-kernel": "^4.4 || ^5.3 || ^6.0 || ^7.0"
+ "symfony/console": "^6.4 || ^7.4 || ^8.0",
+ "symfony/http-kernel": "^6.4 || ^7.4 || ^8.0"
},
"require-dev": {
"broadway/broadway-saga": "^1.0",
@@ -48,8 +48,7 @@
"monolog/monolog": "~2.0",
"phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^11.5",
- "symfony/framework-bundle": "^4.4 || ^5.3 || ^6.0 || ^7.0",
- "symfony/proxy-manager-bridge": "^4.4 || ^5.3 || ^6.0",
+ "symfony/framework-bundle": "^6.4 || ^7.4 || ^8.0",
"phpstan/phpstan-symfony": "^2.0",
"friendsofphp/php-cs-fixer": "^3.0"
},
diff --git a/src/DependencyInjection/BroadwayExtension.php b/src/DependencyInjection/BroadwayExtension.php
index cf687a1..bb71569 100644
--- a/src/DependencyInjection/BroadwayExtension.php
+++ b/src/DependencyInjection/BroadwayExtension.php
@@ -17,15 +17,15 @@
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\DependencyInjection\Alias;
use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
+use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
class BroadwayExtension extends ConfigurableExtension
{
protected function loadInternal(array $mergedConfig, ContainerBuilder $container): void
{
- $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
- $loader->load('services.xml');
+ $loader = new PhpFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
+ $loader->load('services.php');
if (isset($mergedConfig['event_store'])) {
$container->setParameter('broadway.event_store.service_id', $mergedConfig['event_store']);
@@ -39,7 +39,7 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container
$this->loadSerializers($mergedConfig['serializer'], $container, $loader);
if (isset($mergedConfig['saga']) && isset($mergedConfig['saga']['enabled']) && $mergedConfig['saga']['enabled']) {
- $loader->load('saga.xml');
+ $loader->load('saga.php');
if (isset($mergedConfig['saga']['state_repository'])) {
$container->setParameter(
@@ -59,7 +59,7 @@ private function loadCommandBus(array $config, ContainerBuilder $container, Load
);
if ($logger = $config['logger']) {
- $loader->load('auditing.xml');
+ $loader->load('auditing.php');
$container->setAlias('broadway.auditing.logger', new Alias($logger, true));
}
} else {
@@ -70,9 +70,9 @@ private function loadCommandBus(array $config, ContainerBuilder $container, Load
}
}
- private function loadSerializers(array $config, ContainerBuilder $container, XmlFileLoader $loader): void
+ private function loadSerializers(array $config, ContainerBuilder $container, PhpFileLoader $loader): void
{
- $loader->load('serializers.xml');
+ $loader->load('serializers.php');
foreach ($config as $serializer => $serviceId) {
$container->setParameter(sprintf('broadway.serializer.%s.service_id', $serializer), $serviceId);
diff --git a/src/Resources/config/auditing.php b/src/Resources/config/auditing.php
new file mode 100644
index 0000000..f5b5002
--- /dev/null
+++ b/src/Resources/config/auditing.php
@@ -0,0 +1,37 @@
+services();
+
+ $services->set('broadway.auditing.command_logger', CommandLogger::class)
+ ->args([
+ service('broadway.auditing.logger'),
+ service('broadway.auditing.serializer'),
+ ])
+ ->tag('broadway.event_listener', [
+ 'event' => 'broadway.command_handling.command_success',
+ 'method' => 'onCommandHandlingSuccess',
+ ])
+ ->tag('broadway.event_listener', [
+ 'event' => 'broadway.command_handling.command_failure',
+ 'method' => 'onCommandHandlingFailure',
+ ]);
+
+ $services->set('broadway.auditing.serializer', NullByteCommandSerializer::class);
+};
diff --git a/src/Resources/config/auditing.xml b/src/Resources/config/auditing.xml
deleted file mode 100644
index 5334ae5..0000000
--- a/src/Resources/config/auditing.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Resources/config/saga.php b/src/Resources/config/saga.php
new file mode 100644
index 0000000..38a69f3
--- /dev/null
+++ b/src/Resources/config/saga.php
@@ -0,0 +1,48 @@
+services();
+
+ $services->set('broadway.saga.state.state_manager', StateManager::class)
+ ->args([
+ service('broadway.saga.state.repository'),
+ service('broadway.uuid.generator'),
+ ]);
+
+ $services->set('broadway.saga.metadata.factory', StaticallyConfiguredSagaMetadataFactory::class);
+
+ $services->set('broadway.saga.metadata_enricher', SagaMetadataEnricher::class)
+ ->tag('broadway.event_listener', ['event' => 'broadway.saga.post_handle', 'method' => 'postHandleSaga'])
+ ->tag('broadway.metadata_enricher');
+
+ $services->set('broadway.saga.multiple_saga_manager', MultipleSagaManager::class)
+ ->args([
+ service('broadway.saga.state.repository'),
+ // will be populated by RegisterSagaCompilerPass:
+ [],
+ service('broadway.saga.state.state_manager'),
+ service('broadway.saga.metadata.factory'),
+ service('broadway.event_dispatcher'),
+ ]);
+
+ $services->set('broadway.saga.state.in_memory_repository', InMemoryRepository::class);
+};
diff --git a/src/Resources/config/saga.xml b/src/Resources/config/saga.xml
deleted file mode 100644
index e17f4a3..0000000
--- a/src/Resources/config/saga.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Resources/config/serializers.php b/src/Resources/config/serializers.php
new file mode 100644
index 0000000..d96193e
--- /dev/null
+++ b/src/Resources/config/serializers.php
@@ -0,0 +1,21 @@
+services()
+ ->set('broadway.simple_interface_serializer', SimpleInterfaceSerializer::class);
+};
diff --git a/src/Resources/config/serializers.xml b/src/Resources/config/serializers.xml
deleted file mode 100644
index ae9f635..0000000
--- a/src/Resources/config/serializers.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/Resources/config/services.php b/src/Resources/config/services.php
new file mode 100644
index 0000000..8359154
--- /dev/null
+++ b/src/Resources/config/services.php
@@ -0,0 +1,56 @@
+services();
+
+ $services->set('broadway.command_handling.simple_command_bus', SimpleCommandBus::class);
+
+ $services->set('broadway.command_handling.event_dispatching_command_bus', EventDispatchingCommandBus::class)
+ ->args([
+ service('broadway.command_handling.simple_command_bus'),
+ service('broadway.event_dispatcher'),
+ ]);
+
+ $services->set('broadway.event_handling.event_bus', SimpleEventBus::class);
+
+ $services->set('broadway.uuid.converter', BinaryUuidConverter::class);
+
+ $services->set('broadway.uuid.generator', Version4Generator::class)
+ ->public();
+
+ $services->set('broadway.metadata_enriching_event_stream_decorator', MetadataEnrichingEventStreamDecorator::class);
+
+ $services->set('broadway.metadata_enricher.console', CommandMetadataEnricher::class)
+ ->tag('kernel.event_listener', ['event' => 'console.command', 'method' => 'handleConsoleCommandEvent'])
+ ->tag('broadway.metadata_enricher');
+
+ $services->set('broadway.event_dispatcher', CallableEventDispatcher::class);
+
+ $services->set('broadway.event_store.in_memory', InMemoryEventStore::class);
+
+ $services->set('broadway.read_model.in_memory.repository_factory', InMemoryRepositoryFactory::class);
+};
diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml
deleted file mode 100644
index 1b71850..0000000
--- a/src/Resources/config/services.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-