如何定制一个没有使用继承的方法行为吗

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.3,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

如何定制一个没有使用继承的方法行为吗

做一个方法调用之前或之后的事

之前如果你想做点什么,或者只是调用方法后,你可以派遣一个事件分别在开始或者结束的方法:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
CustomMailer{/ /……公共函数发送(美元主题,美元消息){/ /调度事件之前的方法美元事件=BeforeSendMailEvent (美元主题,美元消息);美元- >调度程序- >调度(“mailer.pre_send”,美元事件);/ / foo和bar从事件美元,他们可能会被修改美元主题=美元事件- >getSubject ();美元消息=美元事件- >getMessage ();/ /这里的真正的方法实现美元受潮湿腐烂=……;/ /后做一些方法美元事件=AfterSendMailEvent (美元受潮湿腐烂);美元- >调度程序- >调度(“mailer.post_send”,美元事件);返回美元事件- >getReturnValue ();}}

在这个例子中,扔两个事件:mailer.pre_send在方法执行之前,和mailer.post_send后执行的方法。每个使用一个定制事件类信息沟通这两个事件的侦听器。例如,BeforeSendMailEvent可能像这样:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36
/ / src / AppBundle /事件/ BeforeSendMailEvent.php名称空间AppBundle\事件;使用欧宝娱乐app下载地址\组件\EventDispatcher\事件;BeforeSendMailEvent扩展事件{私人美元主题;私人美元消息;公共函数__construct(美元主题,美元消息){美元- >主题=美元主题;美元- >消息=美元消息;}公共函数getSubject(){返回美元- >主题;}公共函数setSubject(美元主题){美元- >主题=美元主题;}公共函数getMessage(){返回美元- >消息;}公共函数setMessage(美元消息){美元- >消息=美元消息;}}

AfterSendMailEvent即使是这样的:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
/ / src / AppBundle /事件/ AfterSendMailEvent.php名称空间AppBundle\事件;使用欧宝娱乐app下载地址\组件\EventDispatcher\事件;AfterSendMailEvent扩展事件{私人美元returnValue;公共函数__construct(美元returnValue){美元- >returnValue =美元returnValue;}公共函数getReturnValue(){返回美元- >returnValue;}公共函数setReturnValue(美元returnValue){美元- >returnValue =美元returnValue;}}

这两件事让你得到一些信息(如。getMessage ()(如),甚至改变这一信息。setMessage ())。

现在,您可以创建一个事件订阅者钩到这个事件。例如,你可以听mailer.post_send事件和改变方法的返回值:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
/ / src / AppBundle / EventSubscriber / MailPostSendSubscriber.php名称空间AppBundle\EventSubscriber;使用欧宝娱乐app下载地址\组件\EventDispatcher\EventSubscriberInterface;使用AppBundle\事件\AfterSendMailEvent;MailPostSendSubscriber实现了EventSubscriberInterface{公共函数onMailerPostSend(AfterSendMailEvent美元事件){美元受潮湿腐烂=美元事件- >getReturnValue ();/ /修改初始的“ret的美元价值美元事件- >setReturnValue (美元受潮湿腐烂);}公共静态函数getSubscribedEvents(){返回数组(“mailer.post_send”= >“onMailerPostSend”);}}

就是这样!你的用户应该被称为自动(或了解更多事件用户配置)。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。