首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

Symfony2事件散发组件

2013-09-12 
Symfony2事件分发组件介绍面向对象设计通过让每个类有明确的分工责任,确保代码的灵活性和可扩展性。开发人

Symfony2事件分发组件
介绍面向对象设计通过让每个类有明确的分工责任,确保代码的灵活性和可扩展性。开发人员可以通过继承父类,修改其中方法。如果是想要和其他做同样事情的开发人员共享其中的改变,通过继承的方法将无法实现。
举个例子,你想为自己的项目添加一个插件系统,插件需要能够添加方法,或者是当做一个事情之前或者执行一个方法之后做些其他的事情。通过继承很难将实现。
Symfony2通过实现Mediator模式(中间人)可以实现该功能。
以HttpKernel组件为例,当响应对象创建之后,用系统的其他元素对其进行修改将非常必要(例如添加缓存声明),symfony通过扔出一个kernel事件来实现:一个聆听者(对象)告诉发令中心对象(dispatcher)kernel.response事件在某个时刻,symfony2 kernel告诉调度对象分派kernel.response事件,把Response对象作为一个可以访问的参数传递出去调度对象通知所有的kernel.response聆听者,允许他们对Resonse对象进行修改安装使用官方git仓库(https://github.com/symfony/EventDispatcher)使用composer使用方法事件当一个事件被分派出去的时候,它需要一个独一无二的标识符,也是所有聆听者聆听的对象。一个事件实例也会被创建并且传递到所有的聆听者。事件对象常常包含被分派的事件对象。命名规范可以是符合下面规则的任何字符串小写字母,数字,点,下划线前缀名空间后面加点以一个动词作为结尾,用来说明将要发生的事情(例如请求)比如:kernel.responseform.pre_set_data事件名称和事件对象当调度对象通知聆听者的时候,它将事件对象作为参数传递过去。时间对象的基类非常简单,里面只有一个停止事件扩张的方法。
通常情况下,关于特定事件的数据需要同时和事件对象一起传过去,这样聆听者可以有需要的信息。当创建一个事件的聆听者时,传递到聆听者的事件对象可能是事件对象的一个子类,里面包含了更多的可以提取和响应该事件的信息。发令者(The Dispatcher)发令者是事件分发系统的核心成员。总而言之,只有一个发令者被创建,维护所有注册的聆听者,当一个事件被分派的时候,它会通知所有聆听那个事件的聆听者。

$listener = new AcmeListener();$dispatcher->addListener('foo.action', array($listener, 'onFooAction'));

addListener有三个参数:聆听的事件的名称当事件触发是一个可执行的php回调函数被执行的顺序可选的一个数字,越高则越重要

热点排行