Magento2的xml中所有允许的`xsi:type`值是什么


20

在Magento 2中,(几乎)在xml文件中列出的所有参数都有一个属性xsi:type,该属性确定如何解释参数的值。
例如,在di.xml后端模块的文件中有以下内容:

<argument name="scopeType" xsi:type="const">Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT</argument>

这意味着参数scopeType的值是常量的值Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT

或这个

<argument name="template" xsi:type="string">Magento_Theme::root.phtml</argument>

这意味着参数的值template是字符串Magento_Theme::root.phtml

xsi:type属性的所有可能值是什么?


您是否曾经尝试使用a static而不是a const来表示这样的参数?我似乎找不到static在我的课程中适用于字段的类型:-(
peedee '16

不,我没有 我什至认为没有人支持static
Marius

Answers:


36

我已经通过检<xs:extension base="argumentType"入* .xsd文件找到了所有类型。

lib/internal/Magento/Framework/Data/etc/argument/types.xsd,这些是基本类型

  • 数组
  • 字符串
  • 布尔值
  • 对象
  • configurableObject
  • 数字
  • null

lib/internal/Magento/Framework/ObjectManager/etc/config.xsd,可以在di.xm l文件中找到:

  • 对象
  • init_parameter
  • const

lib/internal/Magento/Framework/View/Layout/etc/elements.xsd,可以在布局* .xml文件中找到:

  • 选项
  • 网址
  • 帮手

Magento/Ui/etc/ui_components.xsd,可以在UI组件的* .xml文件中找到:

  • 不变的
  • 网址

14

根据我的研究,这是我发现的:

参数解释器在以下位置创建lib\internal\Magento\Framework\App\ObjectManagerFactory.php

protected function createArgumentInterpreter(
    \Magento\Framework\Stdlib\BooleanUtils $booleanUtils
) {
    $constInterpreter = new \Magento\Framework\Data\Argument\Interpreter\Constant();
    $result = new \Magento\Framework\Data\Argument\Interpreter\Composite(
        [
            'boolean' => new \Magento\Framework\Data\Argument\Interpreter\Boolean($booleanUtils),
            'string' => new \Magento\Framework\Data\Argument\Interpreter\StringUtils($booleanUtils),
            'number' => new \Magento\Framework\Data\Argument\Interpreter\Number(),
            'null' => new \Magento\Framework\Data\Argument\Interpreter\NullType(),
            'object' => new \Magento\Framework\Data\Argument\Interpreter\DataObject($booleanUtils),
            'const' => $constInterpreter,
            'init_parameter' => new \Magento\Framework\App\Arguments\ArgumentInterpreter($constInterpreter),
        ],
        \Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE
    );
    // Add interpreters that reference the composite
    $result->addInterpreter('array', new \Magento\Framework\Data\Argument\Interpreter\ArrayType($result));
    return $result;
}

在这段代码中,您可以清楚地看到根据参数的type属性使用了不同的解释器\Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE

  • 布尔 =>\Magento\Framework\Data\Argument\Interpreter\Boolean
  • 字符串 =>\Magento\Framework\Data\Argument\Interpreter\StringUtils
  • 数字 =>\Magento\Framework\Data\Argument\Interpreter\Number
  • null =>\Magento\Framework\Data\Argument\Interpreter\NullType
  • 对象 =>\Magento\Framework\Data\Argument\Interpreter\DataObject
  • const =>\Magento\Framework\Data\Argument\Interpreter\Constant
  • init_parameter => \Magento\Framework\App\Arguments\ArgumentInterpreter(请注意,该\Magento\Framework\Data\Argument\Interpreter\Constant参数以as作为参数,而不是构造函数参数)

另外,还动态添加了一个额外的解释器来处理数组类型:

  • 数组 =>\Magento\Framework\Data\Argument\Interpreter\ArrayType

注意:该init_parameter类型似乎仅用于app\code\Magento\Store\etc\di.xml初始化一些常量:

<argument name="xFrameOpt" xsi:type="init_parameter">Magento\Framework\App\Response\XFrameOptPlugin::DEPLOYMENT_CONFIG_X_FRAME_OPT</argument>
...
<argument name="isCustomEntryPoint" xsi:type="init_parameter">Magento\Store\Model\Store::CUSTOM_ENTRY_POINT_PARAM</argument>
...
<argument name="runMode" xsi:type="init_parameter">Magento\Store\Model\StoreManager::PARAM_RUN_TYPE</argument>
<argument name="scopeCode" xsi:type="init_parameter">Magento\Store\Model\StoreManager::PARAM_RUN_CODE</argument>
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.