注意:未定义的变量:eventDispatcher?

Posted

技术标签:

【中文标题】注意:未定义的变量:eventDispatcher?【英文标题】:Notice: Undefined variable: eventDispatcher? 【发布时间】:2019-03-13 16:24:37 【问题描述】:

嘿,兄弟们,我正在尝试解决这个问题,并向任何完成注册的新用户发送电子邮件,但我不知道出了什么问题

【问题讨论】:

欢迎来到 SO。请切勿将代码图片放在问题中。剪切和粘贴文本效果很好。在编辑器中,使用顶部的 图标格式化代码。阅读How to Ask 和minimal reproducible example 了解对问题的期望。 嘿,非常感谢,我会的,但我只是想知道,虽然有能力分享图像,为什么不呢?否则为什么有输入文件来浏览图片? 图片很好地展示了使用的界面,或者生成的图形,...但是对于代码,最好将其作为文本。有关详细信息,请参阅此帖子:meta.***.com/questions/285551/… 【参考方案1】:

您通常不想在控制器中创建新的事件调度程序实例。这样做时,您的控制器还将负责附加所有侦听器,这与分派事件的代码与侦听这些事件的应用程序部分之间的松散耦合完全矛盾。

相反,您可能想要使用event_dispatcher 服务。在现代 Symfony 应用程序中,您需要做的就是向控制器操作添加一个额外的参数,该参数使用 EventDispatcherInterface 进行类型提示(就像您已经使用密码编码器一样):

use Symfony\Component\EventDispatcher\EventDispatcherInterface;

public function registerAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, EventDispatcherInterface $eventDispatcher)

    // ...

【讨论】:

感谢您的回答。注入事件调度程序而不是创建事件调度程序是正确的。老实说,这是深夜,问题提供了图像而不是代码,所以我无法复制粘贴控制器声明来添加依赖项。 :P hhhhh 也谢谢你,即使消息没有发送 hhh 我已经从错误中休息了,但现在做得很好,上帝保佑你们【参考方案2】:

您应该在使用之前创建一个 EventDispatcher 对象:

use Symfony\Component\EventDispatcher\EventDispatcherInterface;
....
public function registerAction(..., EventDispatcherInterface $eventDispatcher)


    $event = new GenericEvent($user);
    $eventDispatcher->dispatch(Events::USER_REGISTERED, $event);

编辑:xabbuh 是对的。我的代码块假设您已将注册侦听器添加到调度程序。实际上,这阻止了 EventDispatcher 组件试图提供的解耦。此外,不应该尽可能使用new 在控制器中创建对象,而是使用依赖注入和/或工厂模式。

在你的情况下,你应该在你的控制器中注入 EventDispatcher 服务(通过 EventDispatcherInterface),使用上面的类型提示的自动装配。

【讨论】:

但是消息仍然没有发送。当我使用 cli 时,swift mailer 工作得很好并且发送邮件你认为我错过了什么吗? 您应该首先检查 onUserRegistrated 函数是否按预期执行。如果是这样,我想问题出在 swiftmailer 配置上。 嘿,兄弟,非常感谢你,它的工作非常好,我刚刚在控制器中创建了新实例,它使用依赖注入的正确方式是错误的,因为你注意到了,再次感谢你,你很好,继续前进

以上是关于注意:未定义的变量:eventDispatcher?的主要内容,如果未能解决你的问题,请参考以下文章

EventDispatcher变量声明

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP