From 5701e8996050cc4536956603e8fdf662cee25f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Sch=C3=A4dlich?= Date: Wed, 7 Oct 2020 22:00:36 +0200 Subject: [PATCH] Introduce NullMessage and remove transport setter in MessageInterface --- .../Notifier/Message/ChatMessage.php | 2 +- .../Notifier/Message/EmailMessage.php | 2 +- .../Notifier/Message/MessageInterface.php | 2 - .../Notifier/Message/NullMessage.php | 47 +++++++++++++++++++ .../Component/Notifier/Message/SmsMessage.php | 2 +- .../Notifier/Transport/NullTransport.php | 5 +- .../Notifier/Transport/Transports.php | 2 - 7 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 src/Symfony/Component/Notifier/Message/NullMessage.php diff --git a/src/Symfony/Component/Notifier/Message/ChatMessage.php b/src/Symfony/Component/Notifier/Message/ChatMessage.php index 2c3cfe13cc..5fc1d94a3a 100644 --- a/src/Symfony/Component/Notifier/Message/ChatMessage.php +++ b/src/Symfony/Component/Notifier/Message/ChatMessage.php @@ -77,7 +77,7 @@ final class ChatMessage implements MessageInterface /** * @return $this */ - public function transport(?string $transport): MessageInterface + public function transport(?string $transport): self { $this->transport = $transport; diff --git a/src/Symfony/Component/Notifier/Message/EmailMessage.php b/src/Symfony/Component/Notifier/Message/EmailMessage.php index ab3efed253..199030e775 100644 --- a/src/Symfony/Component/Notifier/Message/EmailMessage.php +++ b/src/Symfony/Component/Notifier/Message/EmailMessage.php @@ -102,7 +102,7 @@ final class EmailMessage implements MessageInterface /** * @return $this */ - public function transport(string $transport): MessageInterface + public function transport(string $transport): self { if (!$this->message instanceof Email) { throw new LogicException('Cannot set a Transport on a RawMessage instance.'); diff --git a/src/Symfony/Component/Notifier/Message/MessageInterface.php b/src/Symfony/Component/Notifier/Message/MessageInterface.php index 146e721ff7..9684813465 100644 --- a/src/Symfony/Component/Notifier/Message/MessageInterface.php +++ b/src/Symfony/Component/Notifier/Message/MessageInterface.php @@ -25,6 +25,4 @@ interface MessageInterface public function getOptions(): ?MessageOptionsInterface; public function getTransport(): ?string; - - public function transport(string $transport): self; } diff --git a/src/Symfony/Component/Notifier/Message/NullMessage.php b/src/Symfony/Component/Notifier/Message/NullMessage.php new file mode 100644 index 0000000000..3fd59de62e --- /dev/null +++ b/src/Symfony/Component/Notifier/Message/NullMessage.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Message; + +/** + * @author Jan Schädlich + * + * @experimental in 5.2 + */ +final class NullMessage implements MessageInterface +{ + private $decoratedMessage; + + public function __construct(MessageInterface $message) + { + $this->decoratedMessage = $message; + } + + public function getRecipientId(): ?string + { + return $this->decoratedMessage->getRecipientId(); + } + + public function getSubject(): string + { + return $this->decoratedMessage->getSubject(); + } + + public function getOptions(): ?MessageOptionsInterface + { + return $this->decoratedMessage->getOptions(); + } + + public function getTransport(): ?string + { + return $this->decoratedMessage->getTransport() ?? 'null'; + } +} diff --git a/src/Symfony/Component/Notifier/Message/SmsMessage.php b/src/Symfony/Component/Notifier/Message/SmsMessage.php index 17f0b19a4e..30d374f428 100644 --- a/src/Symfony/Component/Notifier/Message/SmsMessage.php +++ b/src/Symfony/Component/Notifier/Message/SmsMessage.php @@ -83,7 +83,7 @@ final class SmsMessage implements MessageInterface /** * @return $this */ - public function transport(string $transport): MessageInterface + public function transport(string $transport): self { $this->transport = $transport; diff --git a/src/Symfony/Component/Notifier/Transport/NullTransport.php b/src/Symfony/Component/Notifier/Transport/NullTransport.php index c271676537..10e36f7012 100644 --- a/src/Symfony/Component/Notifier/Transport/NullTransport.php +++ b/src/Symfony/Component/Notifier/Transport/NullTransport.php @@ -15,6 +15,7 @@ use Symfony\Component\EventDispatcher\Event; use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy; use Symfony\Component\Notifier\Event\MessageEvent; use Symfony\Component\Notifier\Message\MessageInterface; +use Symfony\Component\Notifier\Message\NullMessage; use Symfony\Component\Notifier\Message\SentMessage; use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; @@ -34,9 +35,7 @@ class NullTransport implements TransportInterface public function send(MessageInterface $message): SentMessage { - if (null === $message->getTransport()) { - $message->transport((string) $this); - } + $message = new NullMessage($message); if (null !== $this->dispatcher) { $this->dispatcher->dispatch(new MessageEvent($message)); diff --git a/src/Symfony/Component/Notifier/Transport/Transports.php b/src/Symfony/Component/Notifier/Transport/Transports.php index da63d1f069..2bafd23376 100644 --- a/src/Symfony/Component/Notifier/Transport/Transports.php +++ b/src/Symfony/Component/Notifier/Transport/Transports.php @@ -57,8 +57,6 @@ final class Transports implements TransportInterface if (!$transport = $message->getTransport()) { foreach ($this->transports as $transportName => $transport) { if ($transport->supports($message)) { - $message->transport($transportName); - return $transport->send($message); } }