Answers:
我不认为拦截旨在取代事件观察者。
Magento2代码中仍然调度有事件。
拦截器只是处理方法输入或输出的一种方法。
或方法的行为(使用around
拦截器),但据我了解,这是一种危险的方法。
我认为这是尽可能避免类重写的一种方法。
在Magento 1.x中,如果需要修改方法的结果,则需要覆盖包含的类和方法本身。
现在你可以简单地使用before
,after
或around
拦截器来操纵数据。
使用观察者,您可以在方法的某些固定点上操作数据,而不是完整方法本身。
我认为,即使在Magento 2中,尽可能使用观察者仍然是自定义的最佳方法。
拦截是事件的演变。其目标是允许开发人员编写代码而无需考虑扩展点。
对于事件,您必须考虑执行Mage :: dispatchEvent()的位置,以便可以自定义模块。
拦截使您不必考虑这一点。您只需编写您的业务逻辑。每个方法调用都是一个事件。因此,如果以正确的面向对象的方式编写代码,则可以通过设计完全自定义代码。
但是事件提供了使用商务语言的高级服务提供接口。因此,活动将保留在Magento 2中。
当前,仍然可以选择侦听特定事件,我建议拦截器只是重写的替代品。当您有需要的地方时,我仍然会使用这些事件。
如果您查看当前版本,则某些模块的events.xml
文件包含定义。
<event name="cms_wysiwyg_images_static_urls_allowed">
<observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer" />
</event>