【发布时间】:2023-03-30 06:27:02
【问题描述】:
我正在研究 Symfony 上的活动。 我想在每次新用户注册时发送一封电子邮件
我已经创建了这些类
UserEvent.php
<?php
namespace Acme\UserBundle\Event;
final class UserEvents {
const NEW_USER='new.user';
}
newUserEvent.php
<?php
/**
* EVENT DISPATCHER
*/
namespace Acme\UserBundle\Event;
use Acme\UserBundle\Entity\User;
use Symfony\Component\EventDispatcher\Event;
class NewUserEvent {
protected $user;
public function __construct (User $user) {
$this->user = $user;
}
public function getUser () {
return $this->user;
}
}
newUserListener.php
<?php
namespace Acme\UserBundle\Event;
class NewUserListener {
public function sendEmailToUsers(NewUserEvent $event)
{
// ... send email to users
}
}
在我的控制器中
/**
* @Route("/test",name="test")
*/
public function testEvento(){
$em = $this->getEm();
$dispatcher = new EventDispatcher();
// attach listener
$listner = new NewUserListener();
$dispatcher->addListener(UserEvents::NEW_USER,array($listner,'sendEmailToUsers'));
$user = $em->getRepository('AcmeUserBundle:User')->findOneBy(array('username' => 'alex')); //mock
$event = new NewUserEvent($user);
$dispatcher->dispatch(UserEvents::NEW_USER,$event);
return new Response('hi');
}
但是我得到了这个错误
ContextErrorException:可捕获的致命错误:参数 2 传递给 Symfony\Component\EventDispatcher\EventDispatcher::dispatch() 必须是 Symfony\Component\EventDispatcher\Event 的一个实例
我不明白我的错误
【问题讨论】:
-
尝试将
class NewUserEvent {更改为class NewUserEvent extends Event { -
Symfony 的EventDispatcher::dispatch() 需要一个它自己的Event 类的实例。因此,如果你想使用它,你的自定义事件必须在最后扩展它。
标签: symfony