1 Star 1 Fork 2

alen / magento

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
magento2di.xml文件.txt 15.94 KB
一键复制 编辑 原始数据 按行查看 历史
alen 提交于 2020-09-03 10:03 . magento2 di.xml文件详解
di.xml文件
总览
该di.xml文件配置对象管理器注入了哪些依赖项。您还可以使用来指定敏感的配置设置。di.xml
区域和应用程序入口点
每个模块可以具有全局di.xml文件和特定于区域的文件。Magento读取di.xml系统中声明的所有配置文件,并通过附加所有节点将它们合并在一起。
通常,区域特定的di.xml文件应配置表示层的依赖关系,而模块的全局di.xml文件应配置其余的依赖关系。
Magento在以下阶段加载配置:
首字母(app/etc/di.xml)
全球(<moduleDir>/etc/di.xml)
特定地区(<moduleDir>/etc/<area>/di.xml)
在引导过程中,每个应用程序入口点都会di.xml为请求的区域加载适当的文件。
例子:
在中index.php,\Magento\Framework\App\Http该类根据URL中提供的前台名称加载区域。
在中static.php,\Magento\Framework\App\StaticResource该类还根据请求中的URL加载区域。
在中cron.php,\Magento\Framework\App\Cron课程总是加载该crontab区域。
类型配置
类型配置描述对象的生活方式以及如何实例化它。
您可以di.xml通过以下方式在配置节点中配置类型:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<virtualType name="moduleConfig" type="Magento\Core\Model\Config">
<arguments>
<argument name="type" xsi:type="string">system</argument>
</arguments>
</virtualType>
<type name="Magento\Core\Model\App">
<arguments>
<argument name="config" xsi:type="object">moduleConfig</argument>
</arguments>
</type>
</config>
前面的示例声明了以下类型:
moduleConfig:扩展该类型的虚拟类型Magento\Core\Model\Config。
Magento\Core\Model\App:此类型的所有实例都会收到的实例moduleConfig作为依赖项。
虚拟类型
一个虚拟的类型,您可以更改特定注射依赖的论据和改变特定类的行为。这使您可以使用自定义类,而不会影响依赖于原始类的其他类。
该示例为创建虚拟类型Magento\Core\Model\Config并将其指定system为的构造函数参数type。
构造函数参数
您可以di.xml在参数节点中配置类构造函数参数。在创建过程中,对象管理器将这些参数注入到类中。XML文件中配置的参数名称必须与配置的类中的构造函数中的参数名称相对应。
以下示例创建的实例Magento\Core\Model\Session的类构造函数参数$sessionName设置为adminhtml:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Core\Model\Session">
<arguments>
<argument name="sessionName" xsi:type="string">adminhtml</argument>
</arguments>
</type>
</config>
参数类型
object
节点格式:
<argument xsi:type="object">{typeName}</argument>
<argument xsi:type="object" shared="{shared}">{typeName}</argument>
创建typeName类型的实例并将其作为参数传递。您可以将任何类名称,接口名称或虚拟类型传递为typeName。
设置shared属性定义了所创建实例的生活方式。请参阅对象生活方式配置。
string
节点格式:
<argument xsi:type="string">{strValue}</argument>
<argument xsi:type="string" translate="true">{strValue}</argument>
Magento将此参数节点的任何值解释为字符串。
boolean
节点格式:
<argument xsi:type="boolean">{boolValue}</argument>
Magento将此参数节点的任何值转换为布尔值。见下表:
输入类型 数据 布尔值
布尔型 真正 真正
布尔型 假 假
串 “真正”* 真正
串 “假”* 假
串 “ 1” 真正
串 “ 0” 假
整数 1个 真正
整数 0 假
*这些字符串文字区分大小写
number
节点格式:
<argument xsi:type="number">{numericValue}</argument>
此类型的可接受值包括:整数,浮点数或数字字符串。
init_parameter
节点格式:
<argument xsi:type="init_parameter">{Constant::NAME}</argument>
这是由表示的全局应用程序初始化参数Constant::NAME。
const
节点格式:
<argument xsi:type="const">{Constant::NAME}</argument>
这是由表示的常数Constant::NAME。
null
节点格式:
<argument xsi:type="null"/>
这指示为空值。
array
节点格式:
节点格式如下:
<argument xsi:type="array">
<item name="someKey" xsi:type="<type>">someVal</item>
</argument>
Magento用与项目对应的元素构建一个数组,并将其作为参数传递。数组可以包含无限多个项目,每个数组项目可以是任何对象类型,包括数组本身。
当Magento合并给定范围的配置文件时,具有相同名称的数组参数将合并到新数组中。
当Magento稍后通过更具体的作用域或通过代码加载新配置时,新配置中的任何数组定义都将替换加载的配置,而不是合并。
参数示例:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Example\Type">
<arguments>
<!-- Pass simple string -->
<argument name="stringParam" xsi:type="string">someStringValue</argument>
<!-- Pass instance of Magento\Some\Type -->
<argument name="instanceParam" xsi:type="object">Magento\Some\Type</argument>
<!-- Pass true -->
<argument name="boolParam" xsi:type="boolean">1</argument>
<!-- Pass 1 -->
<argument name="intParam" xsi:type="number">1</argument>
<!-- Pass application init argument, named by constant value -->
<argument name="globalInitParam" xsi:type="init_parameter">Magento\Some\Class::SOME_CONSTANT</argument>
<!-- Pass constant value -->
<argument name="constantParam" xsi:type="const">Magento\Some\Class::SOME_CONSTANT</argument>
<!-- Pass null value -->
<argument name="optionalParam" xsi:type="null"/>
<!-- Pass array -->
<argument name="arrayParam" xsi:type="array">
<!-- First element is value of constant -->
<item name="firstElem" xsi:type="const">Magento\Some\Class::SOME_CONSTANT</item>
<!-- Second element is null -->
<item name="secondElem" xsi:type="null"/>
<!-- Third element is a subarray -->
<item name="thirdElem" xsi:type="array">
<!-- Subarray contains scalar value -->
<item name="scalarValue" xsi:type="string">ScalarValue</item>
<!-- and application init argument -->
<item name="globalArgument " xsi:type="init_parameter">Magento\Some\Class::SOME_CONSTANT</item>
</item>
</argument>
</arguments>
</type>
</config>
合并和参数
合并期间,如果参数的类型不同,则参数会用相同的名称替换其他参数。如果参数类型相同,则更新的参数将替换旧的参数。
抽象实现映射
当类的构造函数签名通过其接口请求对象时,对象管理器将使用抽象实现映射。对象管理器使用这些映射来确定特定范围的该类的默认实现。
该preference节点指定默认的实现:
<!-- File: app/etc/di.xml -->
<config>
<preference for="Magento\Core\Model\UrlInterface" type="Magento\Core\Model\Url" />
</config>
此映射位于中app/etc/di.xml,因此对象管理器在全局范围内的Magento\Core\Model\Url任何地方都注入实现类Magento\Core\Model\UrlInterface。
<!-- File: app/code/Magento/Backend/etc/adminhtml/di.xml -->
<config>
<preference for="Magento\Core\Model\UrlInterface" type="Magento\Backend\Model\Url" />
</config>
该映射位于中app/code/Magento/Backend/etc/adminhtml/di.xml,因此对象管理器在admin区域中的Magento\Backend\Model\Url任何地方都注入实现类。
Magento\Core\Model\UrlInterface
使用“首选项”节点覆盖方法
如果要从核心类覆盖公共或受保护的方法,请利用preferencefrom中的节点di.xml来实现它。这是从核心文件中覆盖方法的示例:
<!-- app/code/OrangeCompany/OverrideExample/etc/di.xml -->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Checkout\Block\Onepage\Success" type="OrangeCompany\OverrideExample\Block\Onepage\Success" />
</config>
下面的示例覆盖isVisible了Magento\Checkout\Block\Onepage\Success块类中的方法。
namespace OrangeCompany\OverrideExample\Block\Onepage;
class Success extends \Magento\Checkout\Block\Onepage\Success
{
/**
* Constructor Modification
*
* @param \Magento\Framework\View\Element\Template\Context $context
* @param \Magento\Checkout\Model\Session $checkoutSession
* @param \Magento\Sales\Model\Order\Config $orderConfig
* @param \Magento\Framework\App\Http\Context $httpContext
* @param array $data
*/
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Sales\Model\Order\Config $orderConfig,
\Magento\Framework\App\Http\Context $httpContext,
array $data = []
) {
parent::__construct(
$context,
$checkoutSession,
$orderConfig,
$httpContext,
$data
);
}
/**
* Is order visible
*
* @param Order $order
* @return bool
*/
protected function isVisible(Order $order)
{
# Write your custom logic here.
return !in_array(
$order->getStatus(),
$this->_orderConfig->getInvisibleOnFrontStatuses()
);
}
}
不建议覆盖整个方法,在此将其作为最后的方法。这种方法可能会导致系统冲突并降低系统可升级性。
如有可能,其他可扩展性选项(例如event observers和)plugins也是可取的。
参数配置继承
为类类型配置的参数会将其配置传递给其后代类。任何后代都可以覆盖为其父类型配置的参数。即,父类或接口:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Framework\View\Element\Context">
<arguments>
<argument name="urlBuilder" xsi:type="object">Magento\Core\Model\Url</argument>
</arguments>
</type>
<type name="Magento\Backend\Block\Context">
<arguments>
<argument name="urlBuilder" xsi:type="object">Magento\Backend\Model\Url</argument>
</arguments>
</type>
</config>
在前面的示例中,Magento\Backend\Block\Context是的后代Magento\Framework\View\Element\Context。
第一个条目配置的所有实例Magento\Framework\View\Element\Context及其子代,Magento\Core\Model\Url以$urlBuilder在其构造函数中传递。
第二个条目将覆盖此条目,并配置的所有实例Magento\Backend\Block\Context以Magento\Backend\Model\Url用作$urlBuilder替代。
对象生活方式配置
对象的生活方式决定了该对象可以存在的实例数。
您可以在Magento中配置依赖项以具有以下生活方式:
Singleton(默认值)-此类的一个实例。对象管理器在第一个请求时创建它。再次请求该类将返回相同的实例。处理或结束已注册的容器将释放该实例。
瞬态 -对象管理器为每个请求创建一个新的类实例。
该shared属性决定了两者argument和type配置的生活方式。
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Filesystem" shared="false">
<arguments>
<argument name="adapter" xsi:type="object" shared="false">Magento\Filesystem\Adapter\Local</argument>
</arguments>
</type>
</config>
在此示例中,Magento\Filesystem由于未共享,因此所有客户端都将检索的单独实例Magento\Filesystem。
此外,的每个实例Magento\Filesystem都会获得的单独实例$adapter,因为它也是非共享的。
敏感的和特定于系统的配置设置
对于多系统部署(例如管道部署模型),可以指定以下类型的配置设置:
共享 系统之间使用共享的设置 app/etc/config.php
敏感 限制或机密设置
系统特定的 特定系统或环境所独有的设置
以下代码示例是用于将值指定为敏感值或特定于系统的模板:
<type name="Magento\Config\Model\Config\TypePool">
<arguments>
<argument name="VALUE_TYPE" xsi:type="array">
<item name="CONFIG_PATH" xsi:type="string">ARGUMENT_VALUE</item>
</argument>
</arguments>
</type>
VALUE_TYPE 指定值的类型:sensitive或environment。
CONFIG_PATH 唯一的- /分隔字符串,用于标识此配置设置。
ARGUMENT_VALUE 值1表示该CONFIG_PATH值是敏感的或特定于系统的。默认0值表示它既不敏感也不特定于系统。
不要共享存储在app/etc/env.php开发和生产系统之间的敏感或特定于系统的设置。
有关更多信息和示例,请参阅敏感和环境设置。
与管道部署有关的信息
指定系统特定的敏感配置值的准则
敏感的和特定于系统的配置路径参考
Magento Enterprise B2B Extension配置路径参考
获取类的依赖项注入配置信息
使用dev:di:info命令检索有关类的依赖项注入配置的信息。
以下示例检索Magento\Quote\Model\Quote\Item\ToOrderItem该类的依赖项注入配置信息:
DI configuration for the class Magento\Quote\Model\Quote\Item\ToOrderItem in the GLOBAL area
Preference: Magento\Quote\Model\Quote\Item\ToOrderItem
Constructor Parameters:
+-------------------+--------------------------------------------------+------------------+
| Name | Requested Type | Configured Value |
+-------------------+--------------------------------------------------+------------------+
| orderItemFactory | Magento\Sales\Api\Data\OrderItemInterfaceFactory | |
| objectCopyService | Magento\Framework\DataObject\Copy | |
| dataObjectHelper | Magento\Framework\Api\DataObjectHelper | |
+-------------------+--------------------------------------------------+------------------+
Plugins:
+-----------------------------------------------------+---------+--------+
| Plugin | Method | Type |
+-----------------------------------------------------+---------+--------+
| Magento\Catalog\Model\Plugin\QuoteItemProductOption | convert | before |
| Magento\GiftMessage\Model\Plugin\QuoteItem | convert | after |
| Magento\Bundle\Model\Plugin\QuoteItem | convert | after |
+-----------------------------------------------------+---------+--------+
Plugins for the Preference:
+-----------------------------------------------------+---------+--------+
| Plugin | Method | Type |
+-----------------------------------------------------+---------+--------+
| Magento\Catalog\Model\Plugin\QuoteItemProductOption | convert | before |
| Magento\GiftMessage\Model\Plugin\QuoteItem | convert | after |
| Magento\Bundle\Model\Plugin\QuoteItem | convert | after |
+-----------------------------------------------------+---------+--------+
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/alen2017/magento.git
git@gitee.com:alen2017/magento.git
alen2017
magento
magento
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891