Variable Pool

更新

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的使用方式如下:

  1. 实例化Variable Pool对象。

$variablePool = $objectManager->get('Magento\Framework\Stdlib\Variables');
  1. 使用set方法将一个变量添加到池中。
$variablePool->set('foo', 'bar');
  1. 使用get方法获取一个变量的值。
$value = $variablePool->get('foo');
  1. 使用has方法检查变量是否存在。
if ($variablePool->has('foo')) {
    // do something
}
  1. 使用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/