В 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
поля в моем классе :-(static
Ответы:
Я нашел все типы, проверяя
<xs:extension base="argumentType"
файлы * .xsd.lib/internal/Magento/Framework/Data/etc/argument/types.xsd
это базовые типы :lib/internal/Magento/Framework/ObjectManager/etc/config.xsd
, можно найти в файлах di.xm l:lib/internal/Magento/Framework/View/Layout/etc/elements.xsd
, можно найти в файлах макета * .xml :Magento/Ui/etc/ui_components.xsd
, можно найти в файлах * .xml компонентов пользовательского интерфейса :источник
Согласно моим исследованиям, вот что я нашел:
Интерпретатор аргумента создается в
lib\internal\Magento\Framework\App\ObjectManagerFactory.php
:В этом коде вы можете ясно видеть, что используются разные интерпретаторы на основе атрибута типа аргумента
\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
\Magento\Framework\Data\Argument\Interpreter\Constant
\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
для инициализации некоторых констант:источник