magento2的插件(拦截器)使用介绍
7天成为Magento系统架构师,现在开始学习Magento全栈开发!
《Magento2.X企业级开发实战》
什么是插件,插件的功能
一个插件,或拦截器,是一个类,它通过截取函数调用和在函数调用之前、之后或之后运行代码来修改公共类函数的行为。
插件的局限性
拦截器不能用于下列任何一个:
Magento\Framework\Interception
引导对象实例化之前- Final methods
- Final classes
- 至少包含一个最终公开方法的任何类
- Non-public methods
- Static methods
__construct
- 虚拟类型
声明一个拦截器
拦截器类必须声明在 di.xml
文件在你的模块中:
您必须指定这些元素:
type name
. 一个拦截器观察者类或接口plugin name
. 拦截器名称plugin type
. 拦截器类型,指定此元素时使用下列命名约定:\Vendor\Module\Plugin\<ModelName>Plugin
.
示例代码:
<?PHP
namespace My\Module\Plugin;
class ProductPlugin
{
public function beforeSetName(\Magento\Catalog\Model\Product $subject, $name)
{
return ['(' . $name . ')'];
}
}
?>
函数之后拦截示例代码:
<?php
namespace My\Module\Plugin;
class ProductPlugin
{
public function afterGetName(\Magento\Catalog\Model\Product $subject, $result)
{
return '|' . $result . '|';
}
}
?>
Around methods示例代码
<?php
namespace My\Module\Plugin;
class ProductPlugin
{
public function aroundSave(\Magento\Catalog\Model\Product $subject, callable $proceed)
{
$this->doSmthBeforeProductIsSaved();
$returnValue = $proceed();
if ($returnValue) {
$this->postProductToFacebook();
}
return $returnValue;
}
}
?>
<?php
namespace My\Module\Model;
class MyUtility
{
public function save(SomeType $obj = null)
{
//do something
}
}
<?php
namespace My\Module\Plugin;
class MyUtilityPlugin
{
public function aroundSave(\My\Module\Model\MyUtility $subject, callable $proceed, SomeType $obj)
{
//do something
}
}
<?php
namespace My\Module\Plugin;
class MyUtilityPlugin
{
public function aroundSave(\My\Module\Model\MyUtility $subject, callable $proceed, ...$args)
{
//do something
$proceed(...$args);
}
}
如无特殊说明或标注,任何个人或组织,复制、转载、采集本站内容请注明:
本文来源于:【Magento中文网】,并添加本文地址链接。
如未按上述操作复制或转载,本站有权追究法律责任。
若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
本文来源于:【Magento中文网】,并添加本文地址链接。
如未按上述操作复制或转载,本站有权追究法律责任。
若本站内容侵犯了原著者的合法权益,可联系我们进行处理。