Каковы все допустимые значения `xsi: type` в xml из Magento2

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атрибута?

Мариус
источник
Вы когда-нибудь пытались использовать staticвместо constтакого аргумента? Я не могу найти тип, который работает для staticполя в моем классе :-(
peedee
Нет, я не Я даже не думаю, что есть поддержкаstatic
Мариус

Ответы:

36

Я нашел все типы, проверяя <xs:extension base="argumentType"файлы * .xsd.

lib/internal/Magento/Framework/Data/etc/argument/types.xsdэто базовые типы :

  • " массив "
  • " строка "
  • " логическое "
  • " объект "
  • " configurableObject "
  • " число "
  • " ноль "

lib/internal/Magento/Framework/ObjectManager/etc/config.xsd, можно найти в файлах di.xm l:

  • " объект "
  • " init_parameter "
  • " const "

lib/internal/Magento/Framework/View/Layout/etc/elements.xsd, можно найти в файлах макета * .xml :

  • " варианты "
  • " URL "
  • " помощник "

Magento/Ui/etc/ui_components.xsd, можно найти в файлах * .xml компонентов пользовательского интерфейса :

  • " постоянный "
  • " URL "
Аркадий Чижов
источник
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;
}

В этом коде вы можете ясно видеть, что используются разные интерпретаторы на основе атрибута типа аргумента \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
  • нуль =>\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как параметр, а не параметр конструктора)

Также добавлен дополнительный интерпретатор на лету для обработки типов массивов:

  • массив =>\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>
Рафаэль в цифровом пианизме
источник