【发布时间】:2019-02-21 22:20:51
【问题描述】:
编辑:现在尝试使用 EventSubscriber 作为 b.enoit.be 建议我。但是当我发送邮件时,什么也没有发生。我没有收到任何错误,但邮件也没有存储在我的数据库中。我测试了我做错了什么?
SentMailsListener.php:
<?php
namespace Fidelise\SignUpBundle\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Fidelise\SignUpBundle\Entity\EmailsHistory;
use Swift_Events_SendEvent;
class SentMailsListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [Swift_Events_SendEvent::RESULT_SUCCESS => 'onMailSent'];
}
public function onMailSent(Swift_Events_SendEvent $event)
{
$em = $this->getDoctrine()->getManager();
$message = $event->getMessage();
$email = new EmailsHistory();
$email->setRecipient(key($message->getTo()));
$email->setSubject($message->getSubject());
$email->setBody($message->getBody());
$email->setSender(key($message->getFrom()));
$em->persist($email);
$em->flush();
}
}
services.yml:
services:
mail_sent_subscriber:
class: Fidelise\SignUpBundle\EventListener\SentMailsListener
tags:
- { name: kernel.event_subscriber }
【问题讨论】:
-
我想说我们需要更多的上下文。该方法如何调用?
getDoctrine在幕后,在 ControllerTrait 中,使用服务定位器,失败的has()必须是$this->container上的那个。我非常怀疑容器是否设置在控制器上,但这个功能除外,但它可能来自一种奇怪的依赖注入方式......所以如果没有进一步的上下文,这将很难帮助你。跨度> -
感谢您的回答,我在帖子中添加了一些额外的代码,希望对您有所帮助。如果需要,我可以添加更多。
-
所以是的,确实,你的问题来自于你在控制器中调用一个函数而不是来自路由,所以你的依赖没有被注入。
-
真的,你是不是搞砸了 composer 安装的一个实际存在的依赖项? Eeeew:s
-
好的,感谢您的意见,您知道我该如何解决该依赖问题吗?是的,我确实搞砸了,因为我认为这将是在发送邮件时调用我的“storeEmail”函数的最快方法。如果每次调用 swift 的“发送”函数后我都必须手动调用此函数,我将不得不编辑数十个文件。
标签: php symfony controller doctrine