[Notifier] Move configuration yo PHP

This commit is contained in:
Marcin Szepczyński 2020-06-10 15:35:51 +02:00
parent 9b08626180
commit 9891809d47
5 changed files with 187 additions and 155 deletions

View File

@ -360,7 +360,7 @@ class FrameworkExtension extends Extension
} }
if ($this->isConfigEnabled($container, $config['notifier'])) { 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']); $propertyInfoEnabled = $this->isConfigEnabled($container, $config['property_info']);
@ -2010,14 +2010,14 @@ class FrameworkExtension extends Extension
} }
} }
private function registerNotifierConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader) private function registerNotifierConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader)
{ {
if (!class_exists(Notifier::class)) { 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".'); 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.php');
$loader->load('notifier_transports.xml'); $loader->load('notifier_transports.php');
if ($config['chatter_transports']) { if ($config['chatter_transports']) {
$container->getDefinition('chatter.transports')->setArgument(0, $config['chatter_transports']); $container->getDefinition('chatter.transports')->setArgument(0, $config['chatter_transports']);

View File

@ -0,0 +1,105 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* 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])
;
};

View File

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="notifier" class="Symfony\Component\Notifier\Notifier">
<argument type="tagged_locator" tag="notifier.channel" index-by="channel" />
<argument type="service" id="notifier.channel_policy" on-invalid="ignore" />
</service>
<service id="Symfony\Component\Notifier\NotifierInterface" alias="notifier" />
<service id="notifier.channel_policy" class="Symfony\Component\Notifier\Channel\ChannelPolicy">
<argument type="collection" /> <!-- policy -->
</service>
<service id="notifier.channel.browser" class="Symfony\Component\Notifier\Channel\BrowserChannel">
<argument type="service" id="request_stack" />
<tag name="notifier.channel" channel="browser" />
</service>
<service id="notifier.channel.chat" class="Symfony\Component\Notifier\Channel\ChatChannel">
<argument type="service" id="chatter.transports" />
<argument type="service" id="messenger.default_bus" on-invalid="ignore" />
<tag name="notifier.channel" channel="chat" />
</service>
<service id="notifier.channel.sms" class="Symfony\Component\Notifier\Channel\SmsChannel">
<argument type="service" id="texter.transports" />
<argument type="service" id="messenger.default_bus" on-invalid="ignore" />
<tag name="notifier.channel" channel="sms" />
</service>
<service id="notifier.channel.email" class="Symfony\Component\Notifier\Channel\EmailChannel">
<argument type="service" id="mailer.transports" />
<argument type="service" id="messenger.default_bus" on-invalid="ignore" />
<tag name="notifier.channel" channel="email" />
</service>
<service id="notifier.monolog_handler" class="Symfony\Bridge\Monolog\Handler\NotifierHandler">
<argument type="service" id="notifier" />
</service>
<service id="notifier.failed_message_listener" class="Symfony\Component\Notifier\EventListener\SendFailedMessageToNotifierListener">
<argument type="service" id="notifier" />
</service>
<!-- chatter -->
<service id="chatter" class="Symfony\Component\Notifier\Chatter">
<argument type="service" id="chatter.transports" />
<argument type="service" id="messenger.default_bus" on-invalid="ignore" />
<argument type="service" id="event_dispatcher" on-invalid="ignore" />
</service>
<service id="Symfony\Component\Notifier\ChatterInterface" alias="chatter" />
<service id="chatter.transports" class="Symfony\Component\Notifier\Transport\Transports">
<factory service="chatter.transport_factory" method="fromStrings" />
<argument type="collection" /> <!-- transports -->
</service>
<service id="chatter.transport_factory" class="Symfony\Component\Notifier\Transport">
<argument type="tagged_iterator" tag="chatter.transport_factory" />
</service>
<service id="chatter.messenger.chat_handler" class="Symfony\Component\Notifier\Messenger\MessageHandler">
<argument type="service" id="chatter.transports" />
<tag name="messenger.message_handler" handles="Symfony\Component\Notifier\Message\ChatMessage" />
</service>
<!-- texter -->
<service id="texter" class="Symfony\Component\Notifier\Texter">
<argument type="service" id="texter.transports" />
<argument type="service" id="messenger.default_bus" on-invalid="ignore" />
<argument type="service" id="event_dispatcher" on-invalid="ignore" />
</service>
<service id="Symfony\Component\Notifier\TexterInterface" alias="texter" />
<service id="texter.transports" class="Symfony\Component\Notifier\Transport\Transports">
<factory service="texter.transport_factory" method="fromStrings" />
<argument type="collection" /> <!-- transports -->
</service>
<service id="texter.transport_factory" class="Symfony\Component\Notifier\Transport">
<argument type="tagged_iterator" tag="texter.transport_factory" />
</service>
<service id="texter.messenger.sms_handler" class="Symfony\Component\Notifier\Messenger\MessageHandler">
<argument type="service" id="texter.transports" />
<tag name="messenger.message_handler" handles="Symfony\Component\Notifier\Message\SmsMessage" />
</service>
</services>
</container>

View File

@ -0,0 +1,78 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* 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')
;
};

View File

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="notifier.transport_factory.abstract" class="Symfony\Component\Notifier\Transport\AbstractTransportFactory" abstract="true">
<argument type="service" id="event_dispatcher" />
<argument type="service" id="http_client" on-invalid="ignore" />
</service>
<service id="notifier.transport_factory.slack" class="Symfony\Component\Notifier\Bridge\Slack\SlackTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="chatter.transport_factory" />
</service>
<service id="notifier.transport_factory.telegram" class="Symfony\Component\Notifier\Bridge\Telegram\TelegramTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="chatter.transport_factory" />
</service>
<service id="notifier.transport_factory.mattermost" class="Symfony\Component\Notifier\Bridge\Mattermost\MattermostTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="chatter.transport_factory" />
</service>
<service id="notifier.transport_factory.nexmo" class="Symfony\Component\Notifier\Bridge\Nexmo\NexmoTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="texter.transport_factory" />
</service>
<service id="notifier.transport_factory.rocketchat" class="Symfony\Component\Notifier\Bridge\RocketChat\RocketChatTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="chatter.transport_factory" />
</service>
<service id="notifier.transport_factory.twilio" class="Symfony\Component\Notifier\Bridge\Twilio\TwilioTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="texter.transport_factory" />
</service>
<service id="notifier.transport_factory.firebase" class="Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="texter.transport_factory" />
</service>
<service id="notifier.transport_factory.freemobile" class="Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="texter.transport_factory" />
</service>
<service id="notifier.transport_factory.ovhcloud" class="Symfony\Component\Notifier\Bridge\OvhCloud\OvhCloudTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="texter.transport_factory" />
</service>
<service id="notifier.transport_factory.sinch" class="Symfony\Component\Notifier\Bridge\Sinch\SinchTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="texter.transport_factory" />
</service>
<service id="notifier.transport_factory.null" class="Symfony\Component\Notifier\Transport\NullTransportFactory" parent="notifier.transport_factory.abstract">
<tag name="chatter.transport_factory" />
<tag name="texter.transport_factory" />
</service>
</services>
</container>