From 8f6045d46506bed2b9f1bc910af5b1a0359e1f72 Mon Sep 17 00:00:00 2001 From: erikn69 Date: Fri, 8 Sep 2023 17:00:50 -0500 Subject: [PATCH] Add SymfonyMailCollector (#554) * Add SymfonyMailCollector * add examples for SymfonyMailCollector --- CHANGELOG.md | 4 + README.md | 1 + demo/bridge/symfonymailer/composer.json | 6 ++ demo/bridge/symfonymailer/index.php | 48 +++++++++++ demo/index.php | 1 + docs/bridge_collectors.md | 14 ++++ .../Bridge/Symfony/SymfonyMailCollector.php | 84 +++++++++++++++++++ 7 files changed, 158 insertions(+) create mode 100644 demo/bridge/symfonymailer/composer.json create mode 100644 demo/bridge/symfonymailer/index.php create mode 100644 src/DebugBar/Bridge/Symfony/SymfonyMailCollector.php diff --git a/CHANGELOG.md b/CHANGELOG.md index cf87671..6d51349 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +2023-09-08 + + - Add SymfonyMailCollector (#554) + 2021-12-21 - Add support for `symfony/var-dumper^6` package diff --git a/README.md b/README.md index f9c0112..3429b37 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Includes collectors for: - [Monolog](https://github.com/Seldaek/monolog) - [Propel](http://propelorm.org/) - [Slim](http://slimframework.com) + - [Symfony Mailer](https://symfony.com/doc/current/mailer.html) - [Swift Mailer](http://swiftmailer.org/) - [Twig](http://twig.symfony.com/) diff --git a/demo/bridge/symfonymailer/composer.json b/demo/bridge/symfonymailer/composer.json new file mode 100644 index 0000000..75ca9a2 --- /dev/null +++ b/demo/bridge/symfonymailer/composer.json @@ -0,0 +1,6 @@ +{ + "require": { + "symfony/event-dispatcher": "*", + "symfony/mailer": "*" + } +} diff --git a/demo/bridge/symfonymailer/index.php b/demo/bridge/symfonymailer/index.php new file mode 100644 index 0000000..f266efa --- /dev/null +++ b/demo/bridge/symfonymailer/index.php @@ -0,0 +1,48 @@ +setBaseUrl('../../../src/DebugBar/Resources'); + +$mailCollector = new SymfonyMailCollector(); +$debugbar->addCollector($mailCollector); +$logger = new MessagesCollector('mails'); +$debugbar['messages']->aggregate($logger); + +// Add even listener for SentMessageEvent +$dispatcher = new EventDispatcher(); +$dispatcher->addListener(SentMessageEvent::class, function (SentMessageEvent $event) use ($mailCollector): void { + $mailCollector->addSymfonyMessage($event->getMessage()); +}); + +// Creates NullTransport Mailer for testing +$mailer = new Mailer(new class ($dispatcher, $logger) extends AbstractTransport { + protected function doSend(\Symfony\Component\Mailer\SentMessage $message): void + { + $this->getLogger()->debug('Sending message "'.$message->getOriginalMessage()->getSubject().'"'); + } + public function __toString(): string{ return 'null://'; } +}); + +$email = (new Email()) + ->from('john@doe.com') + ->to('you@example.com') + //->cc('cc@example.com') + //->bcc('bcc@example.com') + //->replyTo('fabien@example.com') + //->priority(Email::PRIORITY_HIGH) + ->subject('Wonderful Subject') + ->text('Here is the message itself'); + +$mailer->send($email); + +render_demo_page(); diff --git a/demo/index.php b/demo/index.php index 25015d3..51dae09 100644 --- a/demo/index.php +++ b/demo/index.php @@ -42,6 +42,7 @@ render_demo_page(function() {
  • Propel
  • Slim
  • Swift mailer
  • +
  • Symfony mailer
  • Twig
  • aggregate(new DebugBar\Bridge\SwiftMailer\SwiftLogCollector($mailer)); $debugbar->addCollector(new DebugBar\Bridge\SwiftMailer\SwiftMailCollector($mailer)); +## Symfony Mailer + +https://symfony.com/doc/current/mailer.html + +Display log messages and sent mail using `DebugBar\Bridge\Symfony\SymfonyMailCollector` + + use Symfony\Component\Mailer\Event\SentMessageEvent; + + $mailCollector = new DebugBar\Bridge\Symfony\SymfonyMailCollector(); + $debugbar->addCollector($mailCollector); + $eventDispatcher->addListener(SentMessageEvent::class, function (SentMessageEvent $event) use (&$mailCollector): void { + $mailCollector->addSymfonyMessage($event->getMessage()); + }); + ## Twig http://twig.sensiolabs.org/ diff --git a/src/DebugBar/Bridge/Symfony/SymfonyMailCollector.php b/src/DebugBar/Bridge/Symfony/SymfonyMailCollector.php new file mode 100644 index 0000000..7095e8d --- /dev/null +++ b/src/DebugBar/Bridge/Symfony/SymfonyMailCollector.php @@ -0,0 +1,84 @@ +messages[] = $message->getOriginalMessage(); + } + + public function showMessageDetail() + { + $this->showDetailed = true; + } + + public function collect() + { + $mails = array(); + + foreach ($this->messages as $message) { + /* @var \Symfony\Component\Mime\Message $message */ + $mails[] = array( + 'to' => array_map(function ($address) { + /* @var \Symfony\Component\Mime\Address $address */ + return $address->toString(); + }, $message->getTo()), + 'subject' => $message->getSubject(), + 'headers' => ($this->showDetailed ? $message : $message->getHeaders())->toString(), + );; + } + + return array( + 'count' => count($mails), + 'mails' => $mails, + ); + } + + public function getName() + { + return 'symfonymailer_mails'; + } + + public function getWidgets() + { + return array( + 'emails' => array( + 'icon' => 'inbox', + 'widget' => 'PhpDebugBar.Widgets.MailsWidget', + 'map' => 'symfonymailer_mails.mails', + 'default' => '[]', + 'title' => 'Mails' + ), + 'emails:badge' => array( + 'map' => 'symfonymailer_mails.count', + 'default' => 'null' + ) + ); + } + + public function getAssets() + { + return array( + 'css' => 'widgets/mails/widget.css', + 'js' => 'widgets/mails/widget.js' + ); + } +}