如何定制一个没有使用继承的方法行为吗
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.3(当前的稳定版本)。
如何定制一个没有使用继承的方法行为吗
做一个方法调用之前或之后的事
之前如果你想做点什么,或者只是调用方法后,你可以派遣一个事件分别在开始或者结束的方法:
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 ();/ /这里的真正的方法实现美元returnValue=……;/ /后做一些方法美元事件=新AfterSendMailEvent (美元returnValue);美元这- >调度程序- >调度(“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 /事件/ BeforeSendMailEvent.php名称空间应用程序\事件;使用ob娱乐下载\组件\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 /事件/ AfterSendMailEvent.php名称空间应用程序\事件;使用ob娱乐下载\组件\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 / EventSubscriber / MailPostSendSubscriber.php名称空间应用程序\EventSubscriber;使用ob娱乐下载\组件\EventDispatcher\EventSubscriberInterface;使用应用程序\事件\AfterSendMailEvent;类MailPostSendSubscriber实现了EventSubscriberInterface{公共函数onMailerPostSend(AfterSendMailEvent美元事件){美元returnValue=美元事件- >getReturnValue ();/ /修改初始的“returnValue“美元价值美元事件- >setReturnValue (美元returnValue);}公共静态函数getSubscribedEvents(){返回(“mailer.post_send”= >“onMailerPostSend”];}}
就是这样!你的用户应该被称为自动(或了解更多事件用户配置)。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。