magento2中的事件Events和观察者详细介绍

PCB工艺-SI9000使用教程 本文介绍了阻抗计算工具SI9000的使用方法,重点讲解了微带线与带状线的区别、共面阻抗概念及参考面选择。通过USB差分走线实例,详细说明了如何选择计算模型、填写参数并确定线宽线距。文章还提供了层叠设计资料和工厂常规阻抗表格作为参考,建议制板时标注需控阻抗的线路供板厂调整。最后简单提及了嘉立创阻抗计算工具作为备选方案。 阅读详情

Magento有一个整洁的发布-订阅模式实现,我们称之为事件和观察者。通过在触发某些操作时调度事件,我们可以运行自定义代码来响应触发的事件。

这些事件是使用Magento\Framework\event\Manager类调度的,该类实现了Magento\ Framework\event \ ManagerInterface。要调度事件,我们只需调用事件管理器实例的调度方法,为其提供我们正在调度的事件的名称以及我们希望传递给观察者的可选数据数组

如下例所示,该示例取自<MAGENTO_DIR>/module-customer/Controller/Account/CreatePost.php文件:

$this - > _eventManager - > dispatch('customer_register_success', ['account_controller' => $this, 'customer' => $customer]);

观察者是通过events.xml文件注册的,如<MAGENTO_DIR>/module persistent/etc/frontend/events.xml中的以下示例所示:

<event name="customer_register_success">
    <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieOnRegisterObserver" />
</event>

通过在整个<MAGENTO_DIR>目录的*.php文件中查找eventManager->dispatch字符串,我们可以看到数百个事件示例,分布在MAGENTO的大多数模块中。

虽然所有这些事件都具有相同的技术重要性,但我们可以说,其中一些事件可能比其他事件在日常基础上使用得更多。这使得花一些时间研究以下类及其发送的事件变得值得:Magento\Framework\App\Action\Action类,具有以下事件:

controller_action_predispatch_' . $request->getRouteName()'
controller_action_predispatch_' . $request->getFullActionName()'
controller_action_postdispatch_' . $request->getFullActionName()'
controller_action_postdispatch_' . $request->getRouteName()
controller_action_postdispatch

Magento\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'

让我们仔细看看其中一个事件,该事件位于<MAGENTO_DIR>/framework/Model/AbstractModel.php文件中:

public function afterCommitCallback() {
    $this - > _eventManager - > dispatch('model_save_commit_after', ['object' => $this]);
    $this - > _eventManager - > dispatch($this - > _eventPrefix.
        '_save_commit_after', $this - > _getEventData());
    return $this;
}
protected function _getEventData() {
    return ['data_object' => $this, $this - > _eventObject => $this, ];
}

eventPrefix和_eventPrefix和e​ventPrefix和_eventObject类型属性在这里特别重要。如果我们浏览Magento\Catalog\Model\Product、Magento\Datalog\Module\Category、

MagentoCustomer\Model\Customer、Magento \ Quote \ Model \ Quote等类型,

Magento\Sales\Model\Order等,我们可以看到,这些实体类型中有很多本质上是从Magento\Framework\Model\AbstractModel扩展而来的,

并提供了它们自己的值来取代eventPrefix=“coreabstract”和_eventPrefix=“core_abstract”和e​ventPrefix=“corea​bstract”和_eventObject=“object”。

这意味着我们可以使用诸如$this->_eventPrefix’之类的事件_save_commit_after’通过events.xml指定观察者。让我们看一下以下示例,该示例取自<MAGENTO_DIR>/module downloadable/etc/events.xml文件:

<config>
    <event name="sales_order_save_commit_after">
        <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\SetLinkStatusObserver" />
    </event>
</config>

观察者被放置在/Observer目录中。每个观察者在Magento\Framework\Event\ObserverInterface类上实现一个单独的执行方法:

class SetLinkStatusObserver implements\ Magento\ Framework\ Event\ ObserverInterface {
    public function execute(\Magento\ Framework\ Event\ Observer $observer) {
        $order = $observer - > getEvent() - > getOrder();
    }
}

就像插件一样,实现不好的观察者很容易导致错误,甚至破坏整个应用程序。这就是为什么我们需要保持观测器的小型化和计算效率,以避免性能瓶颈。

周期性事件循环是一个很容易陷入的陷阱。当观察者在某个时刻调度其侦听的同一事件时,就会发生这种情况。

例如,如果观察者侦听model_save_before事件,然后试图在观察者中再次保存同一实体,这将触发循环事件循环。

为了使我们的观察者尽可能具体,我们需要在适当的范围内宣布他们:

对于只观察前端的事件,您可以在/etc/frontend/events.xml中声明观察者对于只观察后端的事件

可以在/etc/adminhtml/events.xml

为了观察全局事件,您可以在/etc/events.xml中声明观察者。与插件不同,观察者用于触发后续功能,

而不是更改作为其观察事件一部分的函数或数据的行为。

以上内容来自码小课:
在这里插入图片描述

1.4 你绝对不能错过的天气查询工具:MCP 标准化接入实战 本文介绍了如何构建一个符合MCP标准的天气查询服务。通过FastMCP框架集成OpenWeatherMap API,实现实时天气、天气预报和历史天气查询功能。文章详细展示了从环境准备、插件设计到控制器实现的完整流程,包括如何定义工具函数、配置路由和中间件。同时讲解了如何将MCP服务封装为LangChain工具并与DeepSeek等大模型集成,还涵盖了缓存、限流等高级特性。该示例演示了如何将任意API标准化为MCP服务,为Agent应用提供统一接口。 阅读详情

相关推荐

Windows 10/11 安装 HYSPLIT 气象模型全攻略(附必备工具包下载清单)

本文提供了一份详尽的Windows 10/11系统下HYSPLIT气象模型安装与配置全攻略。指南涵盖了从核心认知、必备工具包(Tcl/Tk、ImageMagick)下载,到分步安装、环境变量设置及首次运行验证的完整流程,旨在帮助研究者和学生高效部署这一用于大气轨迹模拟与污染物扩散分析的专业工具。

weixin_28335283的博客 608

magento2 观察者模式的介绍

一、magento2 观察者模式介绍 mageno2在很多地方使用了观察者模式,方便解耦和扩展 ,典型的有在注册成功后会发布customer_register_success事件 在customer/controller/account/CreatePost文件可以查看到 $this->_eventManager->dispatch( 'custom...

qq_26511139的博客 375

农业AI避坑指南:用YOLO11做叶片病害检测时遇到的5个典型问题

本文分享了使用YOLO11模型进行农业叶片病害检测时常见的五个典型问题及解决方案。针对田间多变光照、病害样本不均衡、标注歧义、背景干扰和边缘部署等挑战,提供了包括场景自适应数据增强、解耦训练、软标签与鲁棒损失函数、困难负样本构建以及模型轻量化部署在内的实战经验,旨在帮助开发者提升农业AI项目的落地效果。

ujm56789012的博客 205

Magento2.3.5学习重写核心类

在magento2.3.5版本中学习三种重写核心的的方法,(插件,依赖注入,事件观察者)以及三者的优缺点,各自的使用场景

weixin_43169845的博客 1167

Figure 03人形机器人与Helix端到端控制系统:具身智能突破深度解析

2026年5月,Figure AI的Figure 03人形机器人在一场震撼业界的直播中完成了长达200小时的连续全自动作业,分拣近25万个包裹,零故障。这一里程碑式的成就标志着人形机器人正式从「实验室展示」迈入「规模化商用」阶段。本文深入剖析Figure 03的核心技术——Helix端到端神经网络控制系统,包括System 0/1/2三层架构、视觉运动策略、全身协同控制等关键技术,并提供完整的Python/Go代码示例,帮助开发者理解具身智能的核心原理与实现路径。关键词。

shao.bing的专栏 991

如何用zemax导入solidworks装配体

在zemax使用中,常常需要导入各种零件。如果光机结构较为复杂,那么手工一个一个加载零件,还需要在zmx文件中调整object的位置,非常麻烦。如果能将solidworks的装配体模型直接导入,则可以大幅减小工作量。具体过程为(非序列模式下): 1、新建或打开一个zemax空文件 2、在元件编辑器中,找到一个空文件,双击或直接展开三角符,在类型中找到zemax里的solidworks装配体,如图。...

wojiaoyyy的博客 1万+

magento2 购物车自动更新

magento2 购物车数量改变的时候,出现一个update button,感觉很丑。所有想改成数量变化的时候,自动更新 \Magento_Checkout\web\js\sidebar.js 分别改下两个函数就ok了,加class 主要是为了加 loading 效果,自己定义 /** * @param {HTMLElement} elem ...

qq_39950233的博客 370

【GNSS数据处理】赫尔默特(helmert)方差分量估计解析及代码实现

一、背景 helmert方差分量估计是方差-协方差分量估计的一个特例,在近现代测量平差中,我们处理的数据有明显的变化,数据序列中包括粗差,数据类型不再单一等问题。当我们遇到数据类型两类及以上时,可以考虑使用赫尔默特方差分量估计,应用的前提条件是不同类别的数据需要相互独立,这样我们的权阵就是对角阵。 二、引入 我们先用王者荣耀这款游戏引入一下,王者可是撩妹利器,哈哈,就像你有两部手机(安卓和苹果),带妹的时候大概率会用苹果,因为游戏体验方面苹果要优于安卓,带妹的时候不掉帧,不卡顿,不闪退,要操作有操作,有皮肤

ANKP的博客 1万+

Magento2 重写vendor中的类

重写后的这个类这里需要注意,必须要继承底层vendor那个类(且需要将代码复制过来后重构),如图下。

weixin_42762981的博客 394

避坑指南:SAP CO模块维护成本控制范围的5个常见错误及解决方法

本文深入剖析了SAP CO模块中维护成本控制范围时最易犯的5个常见错误,包括货币参数配置不当、标准层次结构缺失、财政年度变式不一致、功能激活遗漏及集成参数设置错误。重点针对事务码OKKP的配置,提供了详细的排查步骤与实战解决方案,帮助顾问有效规避陷阱,确保成本核算体系稳定运行。

stone的博客 233

Fluent新手避坑:遇到‘Floating point exception’别慌,这7个排查步骤帮你搞定

本文为Fluent新手提供了7个排查'Floating point exception'错误的实用步骤,包括边界条件检查、时间步长优化、求解器配置等关键技巧。通过系统化的诊断流程,帮助用户快速定位并解决CFD仿真中的浮点异常问题,提升计算稳定性。

weixin_42531886的博客 285

Magento2从入门到精通Lesson7 - Observe

Magento2从入门到精通Lesson7 - Observe

林大鸟大的博客 190

PINN疲劳寿命预测优化

本项目基于物理信息神经网络(PINN)构建材料疲劳寿命预测模型,通过融合Paris裂纹扩展方程与实验数据,实现裂纹扩展行为的精准预测。核心方法包括:1)将Paris方程作为物理约束嵌入神经网络训练;2)生成含噪声的模拟数据并进行归一化处理;3)采用PINN-GA联合优化框架,以裂纹扩展速率最小化为目标优化材料参数。该方案通过物理规律与数据驱动的结合,显著提升预测模型的泛化能力,为工程材料寿命评估提供新思路。

huanghm88的专栏 146

Magento 2 事件(Events)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34417183的博客 1121

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Magento Observer for order state is complete events

当订单的状态为complete 的时候,我们想去处理一些事情,可以通过observer来实现,使用"sales_order_save_commit_after" or "sales_order_invoice_pay" observer 然后我们可以获取订单的状态(order status),根据订单的状态去实现你的需求,例子如下: config.xml中配置 // for event sa

Showjian2000的专栏 1543

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Magento架构深度剖析:gh_mirrors/devdo/devdocs揭示的模块化设计与依赖注入

Magento作为领先的开源电商平台,其架构设计融合了现代软件工程的最佳实践。本文将深入解析gh_mirrors/devdo/devdocs项目中展现的Magento模块化架构与依赖注入机制,帮助开发者理解其灵活可扩展的核心设计理念。 ## 一、Magento四层架构:从用户交互到数据持久化 Magento采用清晰的分层架构设计,将系统功能划分为四个主要层次,每层专注于特定职责,确保代码的高内

gitblog_00173的博客 862

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

magento的xml配置文件的简单解析-frontend

<br /><br /> 1、routers:前置控制中路由,获取各个模板对应的类及前置面板名<br /> 2、translate:各个块对应的语言文件,用于多语言支持<br /> 3、layout:对应的是各个块的内容结构块的定义,xml结尾;<br /> 4、events:事件集合,定义了事件的观察者及执行的方法<br /> 5、secure_utl:magento重点功能页的路径<br /> 6、其它不知为何放在这个节点中<br /><br /><br />乱乱的外贸

Andy 523

Magento XML cheatsheet

Event Observer <config> <frontend> [1] <events> <catalog_product_load_after> [2] <observers> <yourModule> [3...

weixin_33712987的博客 147

Magento add product attribute to order item table and quote item table

#1 add attribute for entites in upgrade script: &lt;?php $installer = new Mage_Sales_Model_Resource_Setup('core_setup'); /** * Add 'checkout_process' attribute for entities */ $entities = arra...

I Am Nothing 179

如何写一个event

Customizing Magento using Event-Observer Method Last modified by naitsirch on Mon, September 6, 2010 10:57 Edit this page|Old Revisions TABLE OF CONTENTS Customizing Magento using Event-Observ...

weixin_30521649的博客 93

magento2中的Plugin机制--before方法详解

before-plugin方法的第一个参数始终是观察到的实例类型,通常缩写为$subject或直接由类类型缩写——在我们的示例中是$processor。插件方法必须返回一个数组,该数组的参数类型和数量与观察到的方法的输入参数相同。让我们来看看Magento在插件实现之前的一个,magento2的插件机制允许我们对指定方法运行之前或者之后对该方法进行动态修改,包括对方法的参数、返回值等。before插件,顾名思义,在观察到的方法之前运行。插件方法的所有其他参数必须与观察到的方法的参数匹配。

github_31369641的博客 247

magento的event机制

magento的event机制在使用起来,是一个很好的东西 在magento的各个执行的过程中,中间有很多的event,譬如sales_order_place_after,我们可以通过自己新建一个模块捕捉这个事件,代码如下: config>    global>      events>        sales_order_place_after>          observers>

小迷童 693

Magento Event/Observer的用法//// shell运行脚本

如果你想在某个核心功能增加功能,那magento的event机制就可以大显神威了。 magento通过下面两个方法分发和捕捉事件 Magento中你需要调用 Mage::dispatchEvent(…) 就可以分发(Dispatch)一个Event, 例系统用户登陆事件: Mage::dispatchEvent('customer_login', array('customer'=>$cus

小画家 1049

magento -- Magento事件一览表

MagentoModuleEvent NameParameters Mage Admin   admin_session_user_login_success array(user=>$user) Mage Admin admin_session_user_login_failed array(user_nam

水水的Magento专栏 5948

Magento中事件event的dispatchEvent分发使用方法

Mage::dispatchEvent

IT_Wallace的博客 1235

magento - 如何为某个action指定observer(或称事件event)

magento - 如何为某个action指定observer(或称事件event)有一个需求是很现实的,那就是要求说在客户添加商品到购物栏时做某些特定的处理,这个时候我们需要对magento的checkout模块的cartController的add action做修改,当然为了在下次版本更新时方便起见,同时也是遵循magento的灵活开发规范,我们应该不去修改它的代码,当然你可以想建个

magento网站建设,magento模板开发,magento支付模块 1875
上一篇: magento2中的Plugin机制--after方法详解
下一篇: magento2创建一个模型-model
magento全栈开发
博客等级 码龄11年 195粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值