当处理改变Magento2中原始方法的行为时,拦截是否打算成为首选方法,因为观察者在magento1中?

https://wiki.magento.com/display/MAGE2DOC/Using+Interception
有帮助吗?

解决方案

我不认为拦截旨在取代事件观察者。
Magento2代码中仍然存在调度的事件。

拦截器只是处理方法的输入或输出的一种方法。
或方法的行为(使用 around 拦截器)但据我了解,这是一种冒险的方法。

我认为这更像是一种尽可能避免类重写的方法。
在Magento1。x,如果需要修改方法的结果,则需要重写包含的类和方法本身。
现在你可以简单地使用 before, afteraround 拦截器来操作数据。

使用观察者,您可以在方法的某些固定点中操作数据,而不是完整的方法本身。

在我看来,即使在Magento2中,在可能的情况下使用观察者仍然是定制的最佳方法。

其他提示

拦截是事件的演变。它的目标是允许开发人员在不考虑扩展点的情况下编写他的代码。

与事件,您必须考虑您执行mage :: dispatchevent()的地方,以便您的模块将是可自定义的。

拦截允许您不考虑此问题。你只是写下你的业务逻辑。每个方法调用都是一个事件。因此,如果您以正确的面向对象的方式编写代码,它将通过设计完全可自定义。

但事件提供更高级别的服务提供谈论商务语言的界面。所以活动将留在玛托2。

目前仍然可以选择监听特定事件,我建议拦截器只是重写的替代品。当有一个适合你需要的时候,我仍然会使用这些事件。

如果你看看当前的版本,一些模块有 events.xml 包含定义的文件。

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>
许可以下: CC-BY-SA归因
scroll top