Magento 2中的Variable Pool是一种用于存储和管理应用程序变量的机制。Variable Pool可以在Magento 2应用程序中的任何地方使用,包括模块、主题、插件和其他扩展。
Variable Pool是一个名为Magento\Framework\Stdlib\Variables的类,它实现了Magento\Framework\DataObjectInterface接口。Variable Pool可以存储任何类型的数据,包括标量、数组和对象。它还提供了一组API,用于管理存储在池中的变量,例如设置、获取、删除和检查变量是否存在。
配置变量
配置变量是在管理区的商店>设置>配置部分下设置的值。
变量插入对话框可用的变量路径的默认列表在变量模块的di.xml文件中定义。这个列表可以通过在模块的di.xml文件中为MagentoVariable/Model/Source/Variables类的configPaths参数添加更多条目来扩展。
Example: di.xml file for the Variable module
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Variable\Model\Source\Variables">
<arguments>
<argument name="configPaths" xsi:type="array">
<item name="web" xsi:type="array">
<item name="web/unsecure/base_url" xsi:type="string">1</item>
<item name="web/secure/base_url" xsi:type="string">1</item>
</item>
<item name="trans_email/ident_general" xsi:type="array">
<item name="trans_email/ident_general/name" xsi:type="string">1</item>
<item name="trans_email/ident_general/email" xsi:type="string">1</item>
</item>
<item name="trans_email/ident_sales" xsi:type="array">
<item name="trans_email/ident_sales/name" xsi:type="string">1</item>
<item name="trans_email/ident_sales/email" xsi:type="string">1</item>
</item>
<item name="trans_email/ident_custom1" xsi:type="array">
<item name="trans_email/ident_custom1/name" xsi:type="string">1</item>
<item name="trans_email/ident_custom1/email" xsi:type="string">1</item>
</item>
<item name="trans_email/ident_custom2" xsi:type="array">
<item name="trans_email/ident_custom2/name" xsi:type="string">1</item>
<item name="trans_email/ident_custom2/email" xsi:type="string">1</item>
</item>
<item name="general/store_information" xsi:type="array">
<item name="general/store_information/name" xsi:type="string">1</item>
<item name="general/store_information/phone" xsi:type="string">1</item>
<item name="general/store_information/hours" xsi:type="string">1</item>
<item name="general/store_information/country_id" xsi:type="string">1</item>
<item name="general/store_information/region_id" xsi:type="string">1</item>
<item name="general/store_information/postcode" xsi:type="string">1</item>
<item name="general/store_information/city" xsi:type="string">1</item>
<item name="general/store_information/street_line1" xsi:type="string">1</item>
<item name="general/store_information/street_line2" xsi:type="string">1</item>
<item name="general/store_information/merchant_vat_number" xsi:type="string">1</item>
</item>
</argument>
<argument name="configStructure" xsi:type="object">Magento\Config\Model\Config\Structure\Proxy</argument>
</arguments>
</type>
</config>
自定义变量
自定义变量是在管理区的系统>其他设置>自定义变量下创建的值。这些变量有一个存储视图范围级别,并具有配置值的所有功能。
自定义变量实体也可以在你的模块的DataInstall或DataUpgrade类中创建。更多信息请参见模块生命周期。
Variable Pool的使用方式如下:
- 实例化Variable Pool对象。
$variablePool = $objectManager->get('Magento\Framework\Stdlib\Variables');
- 使用set方法将一个变量添加到池中。
$variablePool->set('foo', 'bar');
- 使用get方法获取一个变量的值。
$value = $variablePool->get('foo');
- 使用has方法检查变量是否存在。
if ($variablePool->has('foo')) {
// do something
}
- 使用unset方法从池中删除一个变量。
$variablePool->unset('foo');
Variable Pool提供了一种方便的方式来存储和管理应用程序变量。它可以在Magento 2应用程序中的任何地方使用,并且可以存储任何类型的数据。由于它实现了Magento\Framework\DataObjectInterface接口,因此可以方便地与其他Magento 2对象集成。
https://devdocs.magento.com/guides/v2.4/extension-dev-guide/variable-pool/