Symfony 3.4 - 如何将 Swiftmailer 传递给事件监听器?

Symfony 3.4 - how would one pass Swiftmailer into an event listener?

我正在使用 Stripe 构建电子商务应用程序。我目前有几个事件侦听器,当某些事情发生时(例如 CustomerProductSKU 正在创建或更新),它们通过它的 API 与 Stripe 通信。因为这些 API 调用可以产生多个 Exceptions,我希望在某些情况下让该应用通过电子邮件发送给我。

那么,我将如何配置我的 services.yml 以将 Swiftmailer 传递给我的听众?我当前的设置(单个示例,但它们或多或少看起来像这样):

AppBundle\EventListener\UserHandler:
        arguments:
            $stripeKey: "%secret_stripe_key%"
            $session: "@session"
            $logger: "@monolog.logger"
        tags:
            - { name: doctrine.event_listener, event: prePersist }
            - { name: doctrine.event_listener, event: preUpdate }

资源标签只是“@swiftmailer”吗?我应该在我的听众中使用什么命名空间?

按照上面的建议,我会使用自动装配。这将避免您必须向 services.yml 添加代码,并且是 Symfony 3.3 的方式。

在 UserHandler 的构造函数中:

__construct(Swift_Mailer $mailer, SessionInterface $session, LoggerInterface $logger) {
  $this->mailer = $mailer;
  $this->logger = $logger;
  $this->session = $session;
}

因此,在您的函数中,您现在可以调用 $this->mailer,由于构造函数中的类型提示,这将被自动装配。会话和记录器也是如此。要找出您正在寻找的服务,您可以执行以下命令:bin/console debug:autowiring

确保在使用语句中包含上面的 类