Magento2中的拦截是否取代了magento1中的观察者?
-
12-12-2019 - |
题
当处理改变Magento2中原始方法的行为时,拦截是否打算成为首选方法,因为观察者在magento1中?
https://wiki.magento.com/display/MAGE2DOC/Using+Interception
解决方案
我不认为拦截旨在取代事件观察者。
Magento2代码中仍然存在调度的事件。
拦截器只是处理方法的输入或输出的一种方法。
或方法的行为(使用 around
拦截器)但据我了解,这是一种冒险的方法。
我认为这更像是一种尽可能避免类重写的方法。
在Magento1。x,如果需要修改方法的结果,则需要重写包含的类和方法本身。
现在你可以简单地使用 before
, after
或 around
拦截器来操作数据。
使用观察者,您可以在方法的某些固定点中操作数据,而不是完整的方法本身。
在我看来,即使在Magento2中,在可能的情况下使用观察者仍然是定制的最佳方法。
其他提示
拦截是事件的演变。它的目标是允许开发人员在不考虑扩展点的情况下编写他的代码。
与事件,您必须考虑您执行mage :: dispatchevent()的地方,以便您的模块将是可自定义的。
拦截允许您不考虑此问题。你只是写下你的业务逻辑。每个方法调用都是一个事件。因此,如果您以正确的面向对象的方式编写代码,它将通过设计完全可自定义。
但事件提供更高级别的服务提供谈论商务语言的界面。所以活动将留在玛托2。
目前仍然可以选择监听特定事件,我建议拦截器只是重写的替代品。当有一个适合你需要的时候,我仍然会使用这些事件。
如果你看看当前的版本,一些模块有 events.xml
包含定义的文件。
<event name="cms_wysiwyg_images_static_urls_allowed">
<observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer" />
</event>