Vielen Dank an alle
Ich habe kürzlich Symfony2 gelernt und kann jetzt die EventDispatcher-Komponente nicht verstehen und die offizielle Dokumentation ist nicht sehr klar. . Lösen
// 这个是sf为你提供的一个基础类
use Symfony\Component\EventDispatcher\Event;
// 你的事件类
class SomeEvent extends Event
{
public function __cosntruct()
{
// 按需定义你的事件类
}
}
对jQuery熟悉?事件机制总是差不多的:
(一)先定义event的名字
这个就好比js的onclick,是一个识别而已,你可以定义个事件名字如:vendor.my_event,为了方便使用,你可以用一个“枚举”类来记录这些event:
代码里就可以用Events::MY_EVENT来代替直接写那个字符串,建这个“枚举”类不是必须,但推荐这么做:
(二)定义一个事件类(上下文定义)
用jQuery我们一般不会自己定义事件类,但其实这个事件类也是存在的(用的默认的),在jQuery的事件回调里,接受的第一个参数就是事件类的对象,这个对象会携带一些上下文的东西,如e.target。
用sf的EventDispatcher,你通过定义自己的事件类,来进行类型检查,和提供回调时的上下文(通俗的说,就是可以从事件对象上取到什么数据)。
(三)触发事件
你有一个事件名了,和一个事件类了,而sf已经给你配好了一个事件分发器,你可以直接使用它来触发事件:
(四)定义一个监听(回调)
(五)使回调监听相应事件
你可以用代码的方式来添加回调:
你也可以用配置的方式,也就是用依赖注入(DIC)来做: