diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index 00918b920e554..66abdff023c75 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -360,7 +360,7 @@ public function load(array $configs, ContainerBuilder $container)
}
if ($this->isConfigEnabled($container, $config['notifier'])) {
- $this->registerNotifierConfiguration($config['notifier'], $container, $loader);
+ $this->registerNotifierConfiguration($config['notifier'], $container, $phpLoader);
}
$propertyInfoEnabled = $this->isConfigEnabled($container, $config['property_info']);
@@ -2010,14 +2010,14 @@ private function registerMailerConfiguration(array $config, ContainerBuilder $co
}
}
- private function registerNotifierConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
+ private function registerNotifierConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader)
{
if (!class_exists(Notifier::class)) {
throw new LogicException('Notifier support cannot be enabled as the component is not installed. Try running "composer require symfony/notifier".');
}
- $loader->load('notifier.xml');
- $loader->load('notifier_transports.xml');
+ $loader->load('notifier.php');
+ $loader->load('notifier_transports.php');
if ($config['chatter_transports']) {
$container->getDefinition('chatter.transports')->setArgument(0, $config['chatter_transports']);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier.php
new file mode 100644
index 0000000000000..8ec33631c1974
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier.php
@@ -0,0 +1,105 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+
+use Symfony\Bridge\Monolog\Handler\NotifierHandler;
+use Symfony\Component\Notifier\Channel\BrowserChannel;
+use Symfony\Component\Notifier\Channel\ChannelPolicy;
+use Symfony\Component\Notifier\Channel\ChatChannel;
+use Symfony\Component\Notifier\Channel\EmailChannel;
+use Symfony\Component\Notifier\Channel\SmsChannel;
+use Symfony\Component\Notifier\Chatter;
+use Symfony\Component\Notifier\ChatterInterface;
+use Symfony\Component\Notifier\EventListener\SendFailedMessageToNotifierListener;
+use Symfony\Component\Notifier\Message\ChatMessage;
+use Symfony\Component\Notifier\Message\SmsMessage;
+use Symfony\Component\Notifier\Messenger\MessageHandler;
+use Symfony\Component\Notifier\Notifier;
+use Symfony\Component\Notifier\NotifierInterface;
+use Symfony\Component\Notifier\Texter;
+use Symfony\Component\Notifier\TexterInterface;
+use Symfony\Component\Notifier\Transport;
+use Symfony\Component\Notifier\Transport\Transports;
+
+return static function (ContainerConfigurator $container) {
+ $container->services()
+ ->set('notifier', Notifier::class)
+ ->args([tagged_locator('notifier.channel', 'channel'), service('notifier.channel_policy')->ignoreOnInvalid()])
+
+ ->alias(NotifierInterface::class, 'notifier')
+
+ ->set('notifier.channel_policy', ChannelPolicy::class)
+ ->args([[]])
+
+ ->set('notifier.channel.browser', BrowserChannel::class)
+ ->args([service('request_stack')])
+ ->tag('notifier.channel', ['channel' => 'browser'])
+
+ ->set('notifier.channel.chat', ChatChannel::class)
+ ->args([service('chatter.transports'), service('messenger.default_bus')->ignoreOnInvalid()])
+ ->tag('notifier.channel', ['channel' => 'chat'])
+
+ ->set('notifier.channel.sms', SmsChannel::class)
+ ->args([service('texter.transports'), service('messenger.default_bus')->ignoreOnInvalid()])
+ ->tag('notifier.channel', ['channel' => 'sms'])
+
+ ->set('notifier.channel.email', EmailChannel::class)
+ ->args([service('mailer.transports'), service('messenger.default_bus')->ignoreOnInvalid()])
+ ->tag('notifier.channel', ['channel' => 'email'])
+
+ ->set('notifier.monolog_handler', NotifierHandler::class)
+ ->args([service('notifier')])
+
+ ->set('notifier.failed_message_listener', SendFailedMessageToNotifierListener::class)
+ ->args([service('notifier')])
+
+ ->set('chatter', Chatter::class)
+ ->args([
+ service('chatter.transports'),
+ service('messenger.default_bus')->ignoreOnInvalid(),
+ service('event_dispatcher')->ignoreOnInvalid(),
+ ])
+
+ ->alias(ChatterInterface::class, 'chatter')
+
+ ->set('chatter.transports', Transports::class)
+ ->factory(['chatter.transport_factory', 'fromStrings'])
+ ->args([[]])
+
+ ->set('chatter.transport_factory', Transport::class)
+ ->args([tagged_iterator('chatter.transport_factory')])
+
+ ->set('chatter.messenger.chat_handler', MessageHandler::class)
+ ->args([service('chatter.transports')])
+ ->tag('messenger.message_handler', ['handles' => ChatMessage::class])
+
+ ->set('texter', Texter::class)
+ ->args([
+ service('texter.transports'),
+ service('messenger.default_bus')->ignoreOnInvalid(),
+ service('event_dispatcher')->ignoreOnInvalid(),
+ ])
+
+ ->alias(TexterInterface::class, 'texter')
+
+ ->set('texter.transports', Transports::class)
+ ->factory(['texter.transport_factory', 'fromStrings'])
+ ->args([[]])
+
+ ->set('texter.transport_factory', Transport::class)
+ ->args([tagged_iterator('texter.transport_factory')])
+
+ ->set('texter.messenger.sms_handler', MessageHandler::class)
+ ->args([service('texter.transports')])
+ ->tag('messenger.message_handler', ['handles' => SmsMessage::class])
+ ;
+};
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier.xml
deleted file mode 100644
index dfc6cdccd34c7..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php
new file mode 100644
index 0000000000000..424c37f53dc06
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php
@@ -0,0 +1,78 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+
+use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory;
+use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory;
+use Symfony\Component\Notifier\Bridge\Mattermost\MattermostTransportFactory;
+use Symfony\Component\Notifier\Bridge\Nexmo\NexmoTransportFactory;
+use Symfony\Component\Notifier\Bridge\OvhCloud\OvhCloudTransportFactory;
+use Symfony\Component\Notifier\Bridge\RocketChat\RocketChatTransportFactory;
+use Symfony\Component\Notifier\Bridge\Sinch\SinchTransportFactory;
+use Symfony\Component\Notifier\Bridge\Slack\SlackTransportFactory;
+use Symfony\Component\Notifier\Bridge\Telegram\TelegramTransportFactory;
+use Symfony\Component\Notifier\Bridge\Twilio\TwilioTransportFactory;
+use Symfony\Component\Notifier\Transport\AbstractTransportFactory;
+use Symfony\Component\Notifier\Transport\NullTransportFactory;
+
+return static function (ContainerConfigurator $container) {
+ $container->services()
+ ->set('notifier.transport_factory.abstract', AbstractTransportFactory::class)
+ ->abstract()
+ ->args([service('event_dispatcher'), service('http_client')->ignoreOnInvalid()])
+
+ ->set('notifier.transport_factory.slack', SlackTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('chatter.transport_factory')
+
+ ->set('notifier.transport_factory.telegram', TelegramTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('chatter.transport_factory')
+
+ ->set('notifier.transport_factory.mattermost', MattermostTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('chatter.transport_factory')
+
+ ->set('notifier.transport_factory.nexmo', NexmoTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('texter.transport_factory')
+
+ ->set('notifier.transport_factory.rocketchat', RocketChatTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('chatter.transport_factory')
+
+ ->set('notifier.transport_factory.twilio', TwilioTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('texter.transport_factory')
+
+ ->set('notifier.transport_factory.firebase', FirebaseTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('texter.transport_factory')
+
+ ->set('notifier.transport_factory.freemobile', FreeMobileTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('texter.transport_factory')
+
+ ->set('notifier.transport_factory.ovhcloud', OvhCloudTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('texter.transport_factory')
+
+ ->set('notifier.transport_factory.sinch', SinchTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('texter.transport_factory')
+
+ ->set('notifier.transport_factory.null', NullTransportFactory::class)
+ ->parent('notifier.transport_factory.abstract')
+ ->tag('chatter.transport_factory')
+ ->tag('texter.transport_factory')
+ ;
+};
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.xml
deleted file mode 100644
index 045eb52a1b96e..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-