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

Notice: Undefined variable: eventDispatcher?

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

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

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

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

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

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

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

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

use Symfony\Component\EventDispatcher\EventDispatcherInterface;

public function registerAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, EventDispatcherInterface $eventDispatcher)
{
    // ...
}