Які всі дозволені значення `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, це базові типи :

  • " масив "
  • " рядок "
  • " булева "
  • " об'єкт "
  • " configigurableObject "
  • " число "
  • " 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 файли:

  • " параметри "
  • " 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
  • 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параметр бере як параметр, а не параметр конструктора)

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

  • масив =>\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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.