Magento入门教程Magento中的事件和观察者。这篇Magento入门教程主要介绍了Magento中事件的一般实现和具体的观察者。希望通过本文档,读者可以快速上手Magento开发。更详细的教程地址参考《Magento 实战》DefiningEventsandobserversinMagento是对发布-订阅模型的简洁实现。它允许我们在触发特定行为时抛出事件,并调用我们的自定义代码以响应触发的事件。事件通过Magento\Framework\Event\Manager类调度。它实现了Magento\Framework\Event\ManagerInterface接口。调用事件管理对象(eventManager)实例的dispatch方法触发事件。第一个参数是触发事件的名称,第二个参数是可选参数,类型为数组,可以包含需要传递给监听器的数据。/module-customer/Controller/Account/CreatePost.php中的示例如下:$this->_eventManager->dispatch('customer_register_success',['account_controller'=>$this,'customer'=>$顾客]);通过events.xml注册观察者,/module-persistent/etc/frontend/events.xml中的例子如下:Magento中比较重要的事件在目录下的PHP文件中搜索eventManager->dispatch可以看到很多事件的例子。我们将重点关注以下课程和相关事件。Magento\Framework\App\Action\Action类中包含以下事件controller_action_predispatch'controller_action_predispatch_'。$request->getRouteName()'controller_action_predispatch_'。$request->getFullActionName()'controller_action_postdispatch_'。$request->getFullActionName()'controller_action_postdispatch_'。$request->getRouteName()controller_action_postdispatchMagento\Framework\Model\AbstractModel中包以下事件model_load_before$this->_eventPrefix。'_load_before'model_load_after$this->_eventPrefix。'_load_after'model_save_commit_after$this->_eventPrefix。'_save_commit_after'model_save_before$this->_eventPrefix。'_save_before'model_save_afterclean_cache_by_tags$this->_eventPrefix。'_save_after'model_delete_before$this->_eventPrefix。'_delete_before'model_delete_afterclean_cache_by_tags$this->_eventPrefix。'_delete_after'model_delete_commit_after$this->_eventPrefix。'_delete_commit_after'$this->_eventPrefix。'_clear'Magento\Framework\Model\ResourceModel\Db\Collection类包含以下事件core_collection_abstract_load_before$this->_eventPrefix。'_load_before'core_collection_abstract_load_after$this->_eventPrefix。'_load_after'在/framework/View的事件view_block_abstract_to_html_beforeview_block_abstract_to_html_afterview_message_block_render_grouped_html_afterlayout_render_before'layout_render_before_'中也有一些更重要的事件。$this->request->getFullActionName()core_layout_block_create_afterlayout_load_beforelayout_generate_blocks_beforelayout_generate_blocks_aftercore_layout_render_element具体事件相关实现下面看看/framework/Model/AbstractModel.php类中的一个事件的代码publicfunctionafterCommitCallback(){$this->_eventManager->dispatch('model_save_commit_after',['object'=>$this]);$this->_eventManager->dispatch($this->_eventPrefix.'_save_commit_after',$this->_getEventData());返回$this;}受保护函数_getEventData(){return['data_object'=>$this,$this->_eventObject=>$this,];}$_eventPrefix和$_eventObject属性在这里非常重要,如果我们看一下Magento\Catalog\Model\Product、Magento\Catalog\Model\Category、Magento\Customer\Model\Customer、Magento\Quote\Model\Quote、Magento\Sales\Model\Order等继承自Magento\Framework\Model\AbstractModel的类都提供了自己的值给覆盖父类的$_eventPrefix='core_abstract'和$_eventObject='object',所以我们可以通过$this->_eventPrefix指定不同的观察者。'_save_commit_after'全文地址:https://www.kancloud.cn/yuesi...