Quelles sont toutes les valeurs autorisées de «xsi: type» dans les xml de Magento2

20

Dans Magento 2 (presque) tous les arguments répertoriés dans les fichiers xml ont un attribut xsi:typequi détermine comment la valeur de l'argument est interprétée.
Par exemple, dans le di.xmlfichier du module backend il y a ceci:

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

cela signifie que la valeur de l'argument scopeTypeest la valeur de la constanteMagento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT

ou celui-ci

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

cela signifie que la valeur de l'argument templateest la chaîne Magento_Theme::root.phtml.

Quelles sont toutes les valeurs possibles de cet xsi:typeattribut?

Marius
la source
Avez-vous déjà essayé d'utiliser un staticau lieu d'un constpour un tel argument? Je n'arrive pas à trouver un type qui fonctionne pour un staticchamp dans ma classe :-(
peedee
Non, je ne l'ai pas fait. Je ne pense même pas qu'il y ait un soutien pourstatic
Marius

Réponses:

36

J'ai trouvé tous les types <xs:extension base="argumentType"en archivant les fichiers * .xsd.

lib/internal/Magento/Framework/Data/etc/argument/types.xsd, ce sont des types de base :

  • " tableau "
  • " chaîne "
  • " booléen "
  • " objet "
  • " configurableObject "
  • " nombre "
  • " null "

lib/internal/Magento/Framework/ObjectManager/etc/config.xsd, peut être trouvé dans les fichiers di.xm l:

  • " objet "
  • " init_parameter "
  • " const "

lib/internal/Magento/Framework/View/Layout/etc/elements.xsd, se trouve dans les fichiers layout * .xml :

  • " options "
  • " url "
  • " aide "

Magento/Ui/etc/ui_components.xsd, se trouve dans les fichiers * .xml des composants de l'interface utilisateur :

  • " constant "
  • " url "
Arkadii Chyzhov
la source
14

D'après mes recherches, voici ce que j'ai trouvé:

L'interpréteur d'arguments est créé dans 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;
}

Dans ce code, vous pouvez clairement voir que différents interprètes sont utilisés en fonction de l'attribut type de l'argument \Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE:

  • booléen =>\Magento\Framework\Data\Argument\Interpreter\Boolean
  • chaîne =>\Magento\Framework\Data\Argument\Interpreter\StringUtils
  • nombre =>\Magento\Framework\Data\Argument\Interpreter\Number
  • null =>\Magento\Framework\Data\Argument\Interpreter\NullType
  • objet =>\Magento\Framework\Data\Argument\Interpreter\DataObject
  • const =>\Magento\Framework\Data\Argument\Interpreter\Constant
  • init_parameter => \Magento\Framework\App\Arguments\ArgumentInterpreter(notez que celui-ci prend le \Magento\Framework\Data\Argument\Interpreter\Constantparamètre as et non le paramètre constructeur)

Un interpréteur supplémentaire est également ajouté à la volée pour gérer les types de tableaux:

  • tableau =>\Magento\Framework\Data\Argument\Interpreter\ArrayType

Remarque: il semble que le init_parametertype ne soit utilisé que dans app\code\Magento\Store\etc\di.xmlpour lancer certaines constantes:

<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>
Raphael chez Digital Pianism
la source