Questions tagged «plugin»

表示有关Magento 2插件的问题(BeforePlugin,AfterPlugin和AroundPlugin)。插件在Magento文档中也称为拦截器。

3
Magento 2:互动之前/前后/之后的插件
在Magento 2中,当您创建“周围”插件时 public function aroundRenderResult( \Magento\Framework\Controller\ResultInterface $subject, \Closure $proceed, ResponseHttp $response ) { //... $proceed($response); //... } 您可以继续进行下一个插件,最终通过调用/调用传入的$proceed方法来调用实际的原始方法。这是一种常见的设计模式,通常在PHP Frameworks中间件实现中看到。 但是,它确实给实现细节带来了一些混乱。特别 如果除之外aroundPlugin,对象/类还定义了before或after插件,它们何时相对于周围的插件链触发? 即所有之前的方法会在所有周围的插件方法触发之前触发吗?或插件,然后将只火最终,实际前实际方法火灾? 我要跟踪的具体问题是,当Magento处于全页缓存模式时,我似乎无法获得与Magento 2前端控制器的调度方法相连的插件。全页缓存由不调用的环绕插件操作$proceed($response)。我已经尝试研究这些插件的一些代码,并且发现系统很难在不知道插件打算如何工作的情况下进行推理。 即- 在此特定实例中,开发文档页面上的描述似乎不准确。尚不清楚文档是否错误,或者这是最近引入的错误,是否是边缘情况,或者我的插件配置是否错误。 是否有人通过直接观察或文化知识知道这种优先次序应该如何起作用?

5
学习Magento插件开发
我从事PHP开发已有13年以上,只要有其他一些流行的项目(如WordPress),就对PHP本身有广泛的了解。我没有Magento的经验。 我现在有一个全职工作,在一家使用Magento的公司工作,我的所有开发工作现在几乎都将在Magento上进行。 第一次看了Magento之后,我的最初想法是,哇,我现在对自己有什么看法?但是后来我中经验丰富的开发人员出现并记住,那只是PHP。 因此,我有一些基本的Magento问题,非常感谢经验丰富的Magento开发人员提供的一些答案... 在该网站旁,最理想的学习magento开发的地方是什么? 到目前为止,扩展程序/插件对我还是很困惑。诸如WordPress之类的其他平台允许您将插件放置在其自己的文件夹中,所有文件都位于该文件夹下。从目前为止我所看到的,一个插件可能分散在Magento的多个文件夹中,这是正确的吗? 我已经了解了如何覆盖核心功能。因此,如果核心文件位于此处,/app/code/core/Mage/SitemapModel/Resource/Catalog则可以通过在此位置创建文件来覆盖它,/app/code/local/Mage/SitemapModel/Resource/Catalog那么它如何与扩展/插件一起使用?如果我创建了一个需要超越核心功能的插件,那么我必须在各处放置文件才能使该扩展正常工作吗? 您是否希望从magento开始了解其他信息? 感谢您的见解,我知道这是一个多部分的问题,但是我认为任何答案都对自己和其他起步有帮助,如果需要的话,我将制作此公共Wiki。

2
Magento 2:插件与观察者
在Magento 2中,使用插件与观察者来实现目标的利弊是什么? 我知道观察者订阅了事件,而插件可以在Magento类上调用公共方法之前和/或之后跳入,但是可以肯定的是,它们现在已经非常接近交叉路径了吗?

1
Magento 2:var / generation中的Interceptors文件是什么?
所以我注意到其中的一些Interceptor.php文件var/generation 我知道此文件夹包含为以下内容即时创建的生成的类: 工厂工厂 代理人 外挂程式 我假设拦截器文件链接到插件文件,但是有时我不知道这些文件是如何生成的。例如,我有,var/generation/Magento/Framework/App/Response/Http/Interceptor.php但此文件似乎与任何现有类都不匹配。 因此,我正在寻找有关Interceptor.php文件如何生成的详细解释的工作流程?

2
重写Magento 2类与插件
Magento 2具有与Magento 1相对的插件/拦截/拦截器的概念。 对于每种公共方法,它们的作用就像事件发生之前或之后。很好 您也可以使用around插件来替换方法的功能。 但是Magento 2仍然提供了或多或少以M1方式重写类的可能性。 我想看到一些重写类而不是使用插件的例子。 我知道这在您要更改核心保护方法的行为时很有用,但是在其他情况下是否建议或需要重写?

3
Magento 2中哪些类是“可拦截/可插入”的类
日期:2015年5月30日(鉴于Magento 2的性质不断变化)。 Magento 2引入了一个插件概念,通过拦截器模式实现。 从文档中尚不清楚的是-Magento中的哪些类和对象是“可拦截的”?也就是说,您可以使用如下所示的XML配置插件 <config> <type name="{ObservedType}"> <plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="true"/> </type> </config> 但尚不清楚哪些类可以作为来使用ObservedType。这篇较老的Wiki文章说了一些线索 请注意,插件功能不适用于-在没有依赖项注入的情况下创建的类,即直接使用运算符new创建的类,-Final方法,-Final类 通过依赖项注入创建的任何对象是否可以被拦截?是否ObservedType需要成为a __construct方法中提供的类型提示,或者是否可以(应该吗?)还可以吗? 在我开始使用Magento 2拦截器之前,主要是想弄清楚我能做什么和不能做什么。

2
如何在Magento2中覆盖或禁用核心插件?
我正在使用Magento2建立市场。因此,我需要能够使用供应商的客户凭证来加载客户的订单。 问题在于,Magento2使用插件来验证只有该订单的客户(或管理员)才能加载该订单。 在这种情况下,我需要覆盖整个插件或覆盖protected方法isAllowed()。不修改内核怎么办? Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization 看起来像这样: use Magento\Authorization\Model\UserContextInterface; use Magento\Framework\Exception\NoSuchEntityException; class Authorization { /** * @var UserContextInterface */ protected $userContext; /** * @param UserContextInterface $userContext */ public function __construct( \Magento\Authorization\Model\UserContextInterface $userContext ) { $this->userContext = $userContext; } /** * Checks if order is allowed * * @param \Magento\Sales\Model\ResourceModel\Order $subject * @param …

2
Magento 2:不命名插件类`\ Plugin`的后果
在Magento 2中使用未以结尾的插件类会产生任何后果\Plugin吗?该文档表明,这一类应该在名称结尾\Plugin。 插件的类的名称或其虚拟类型。指定此元素时,请使用以下架构:\ Plugin。 但是,有一些不遵循此规则的代码插件。 <!-- #File: app/code/Magento/Weee/etc/frontend/di.xml--> <plugin name="weee-app-action-dispatchController-context-plugin" type="Magento\Weee\Model\App\Action\ContextPlugin"/> 不使用\Plugin您的班级名称会有任何程序上的后果吗?还是仅仅是一个惯例-类似于Magento 1的_Observer类名惯例?
14 magento2  plugin 

4
覆盖Magento 2中的抽象类
在Magento 1中,我可以将抽象类复制到本地或社区目录中,当自动加载加载此类时,Magento会使用它。 有一些解决方案可以代替Magento加载我的课程 vendor/magento/framework/Model/AbstractModel.php吗? 中di.xml的抽象类首选项不起作用。仅插件?

1
购物车规则不再有效时,是否存在事件或插件位置?
当购物车价格规则不再有效时(例如,当它过期或您更改不再适用的其他产品的数量时),是否可以插入某个事件或地点?我知道它会自动从购物车中删除,但是我似乎无法在代码中找到发生这种情况的地方。 我正在编写一个模块,该模块将购物车中的免费产品添加到小计超过X金额的优惠券中。除了减少小计中X之下的购物车中的物品数量时,其他所有操作都有效。正在删除优惠券,但我的产品仍留在购物车中。 到目前为止,我已经利用以下事件来做到目前为止我需要做的事情... salesrule_validator_process checkout_cart_update_items_after sales_quote_collect_totals_before 我确实发现了Magento\Quote\Model\CouponManagement一个看起来很有希望的东西,因为它具有set()和remove()方法,但是在更新购物车时似乎没有被调用。 在checkout_cart_update_items_after看来,这似乎是我可以检查的合乎逻辑的地方,但看来规则仍然是根据$cart->getQuote()->getAppliedRuleIds() 更新:我最终为checkout_cart_save_after事件添加了一个观察者,该事件在此之后运行,collectTotals()因此知道规则是否仍在购物车中。然后,我基本上$quote->getAppliedRuleIds()与$quote->getOrigData('applied_rule_ids')进行比较,看看规则是否已删除。我觉得有一种更好的方法可以执行此操作,但是暂时可以。我仍然有优惠券过期的问题...

1
Magento2插件在方法$ proceed上的可调用参数和闭包参数之间的方法不同
我检查了magento2,有两种类型的参数可以发送到 周围方法 \Closure $proceed 例 aroundSave(\Magento\Catalog\Model\Product $subject, \callable $proceed) \callable $proceed 例 aroundSave(\Magento\Catalog\Model\Product $subject, \Closure $proceed) 现在我的问题是: 关闭和可调用之间有什么区别? 为什么要使用$ proceed参数定义两个不同类型的类型? 这两种类型的参数有什么用? 任何可以描述它的细节吗



3
Magento 2:选择哪种扩展机制?
我们可以通过两种方式扩展控制器:使用首选项和使用插件。但是我不明白,哪一个是好的,以及偏好vs插件的优缺点。 <preference for="Magento\Checkout\Controller\Index\Index" type="mymodule\Helloworld\Controller\Index\Index" /> <type name="Magento\Catalog\Model\Product"> <plugin name="getname-test-module" type="mymodule\Helloworld\Model\Plugin\Product" sortOrder="10"/> </type>

2
吸气剂/塞特剂的插件
我试图将评论的状态approved改为pending用户在Magento 2的前端中发布评论的状态。 我采用了这种方法。创建前的插件,仅适用于前端区域,该方法setStatusId为Magento\Review\Model\Review是这个样子的 public function beforeSetStatusId(\Magento\Review\Model\Review $review, $status) { return [\Magento\Review\Model\Review::STATUS_APPROVED]; } 这对我来说就像一个好主意。自我返回批准状态以来,它应该可以正常工作。然后,实际方法应将此作为参数。 但令我惊讶的是,它没有用。 然后我挖了一下,发现setStatusId评论模型中不存在该方法。它被神奇地称为,它实际上可以运行setData('status_id', $status)。 然后,我在生成的拦截器中进行了查看,实际上没有setStatusId方法。 我该如何在magento 2中插入魔术获取器/设置器?那有可能吗? 注意:我不需要使评论自动获得批准的解决方案。我知道我可以采取其他方法,例如save_before赛事。目前这并不重要。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.