Symfonyob娱乐下载 4.3中的新功能:更简单的事件分派
2019年3月25日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
提供的
尼古拉斯Grekas
在# 28920.
在Syob娱乐下载mfony 3.3中,我们做了命名服务的可选类并开始建议使用全限定类名(FQCN)作为服务ID。这使得配置更加直观,并帮助您避免考虑命名服务的任意字符串。
遵循同样的思想,在Symfony 4.3中,我们改变了ob娱乐下载EventDispatcherInterface:调度()
方法:
1 2 3 4 5 6 7 8 9
/ /……$订单=新订单();$newOrderEvent=新OrderPlacedEvent ($订单);/ /之前$调度程序->调度(OrderEvents::NEW_ORDER,$newOrderEvent);/ /后$调度程序->调度($newOrderEvent, OrderEvents::NEW_ORDER);
虽然这个变化看起来很小,但它有助于简化其余的应用程序代码。对于初学者,您可以使用事件的FQCN订阅事件:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
类StoreSubscriber实现了EventSubscriberInterface{公共静态函数getSubscribedEvents(){/ /之前返回[OrderEvents::NEW_ORDER = >“onStoreOrder”,);/ /后返回[OrderPlacedEvent::类= >“onStoreOrder”,);}/ /……}
类中的事件名称现在是可选的调度()
方法,因此您可以只传递事件对象:
1 2 3 4 5
/ /之前$调度程序->调度(OrderEvents::NEW_ORDER,$newOrderEvent);/ /后$调度程序->调度($newOrderEvent);
总之,新调度()
signature允许您基于纯PHP类开发代码,而不是发明任意字符串来命名事件。
更新了HttpKernel事件类
除了前面的更改之外,我们还更新了Symfony为自己的事件传递的事件的类。ob娱乐下载新名称更加直观和简洁:
- 重命名
FilterControllerArgumentsEvent
来ControllerArgumentsEvent
- 重命名
FilterControllerEvent
来ControllerEvent
- 重命名
FilterResponseEvent
来ResponseEvent
- 重命名
GetResponseEvent
来RequestEvent
- 重命名
GetResponseForControllerResultEvent
来ViewEvent
- 重命名
GetResponseForExceptionEvent
来ExceptionEvent
- 重命名
PostResponseEvent
来TerminateEvent
支持两个调度程序
希望提供与新旧版本向前和/或向后兼容性的捆绑包和包调度()
方法可以使用新的LegacyEventDispatcherProxy
类:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
使用ob娱乐下载\组件\EventDispatcher\EventDispatcherInterface;使用ob娱乐下载\组件\EventDispatcher\LegacyEventDispatcherProxy;类SomeService{公共函数__construct(EventDispatcherInterface$调度程序){$这->dispatcher = LegacyEventDispatcherProxy::装修($调度程序);}公共函数someMethod(){/ /……//使用新的方式分派事件(带或不带事件名)//即使所提供的dispatcher仍然实现了遗留方式$这->调度程序->调度($newOrderEvent);$这->调度程序->调度($newOrderEvent, OrderEvents::NEW_ORDER);}}
发表在#生活在边缘
评论
安东尼Makdessi
2019年3月25日说在11:18
$this->dispatcher->dispatch()否?在SomeService::someMethod()中
@Antoine是的!我已经更新了博客文章。谢谢。
断变化?分派参数的顺序改变了,BC兼容性怎么样?
@Ksaveras这个变化不会是一个“突破性的变化”。ob娱乐下载Symfony 4.3将在内部进行所需的更改,以便您的代码在不更改的情况下继续工作,并将触发弃用通知(要升级到2019年11月发布的Symfony 5.0,您需要更改参数顺序)。
如果您开发一些需要同时支持这两种方法的包,您可以使用本文中解释的LegacyEventDispatcherProxy类。
如果您开发一些需要同时支持这两种方法的包,您可以使用本文中解释的LegacyEventDispatcherProxy类。
Fabien Papet is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now