【问题标题】:function getDoctrine won't work in one specific function of a controller函数 getDoctrine 不能在控制器的一个特定函数中工作
【发布时间】: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-&gt;container 上的那个。我非常怀疑容器是否设置在控制器上,但这个功能除外,但它可能来自一种奇怪的依赖注入方式......所以如果没有进一步的上下文,这将很难帮助你。跨度>
  • 感谢您的回答,我在帖子中添加了一些额外的代码,希望对您有所帮助。如果需要,我可以添加更多。
  • 所以是的,确实,你的问题来自于你在控制器中调用一个函数而不是来自路由,所以你的依赖没有被注入。
  • 真的,你是不是搞砸了 composer 安装的一个实际存在的依赖项? Eeeew:s
  • 好的,感谢您的意见,您知道我该如何解决该依赖问题吗?是的,我确实搞砸了,因为我认为这将是在发送邮件时调用我的“storeEmail”函数的最快方法。如果每次调用 swift 的“发送”函数后我都必须手动调用此函数,我将不得不编辑数十个文件。

标签: php symfony controller doctrine


【解决方案1】:

确保您的驱动程序从AbstractController 扩展。反正没有更多的代码,很难给你一个具体的答案。

【讨论】:

  • 感谢您的回答。我编辑了我的帖子并添加了一些代码。如您现在所见,我的 IndexController 类扩展了 Controller。它是否需要扩展 AbstractController (我的项目中什至没有那个类)?因为在该文件中调用的每个其他“getDoctrine”函数都可以在没有它的情况下完美运行,所以这让我有点困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2017-04-23
  • 1970-01-01
相关资源
最近更新 更多