¿Cuáles son todos los valores permitidos de `xsi: type` en los xml de Magento2

20

En Magento 2 (casi) todos los argumentos enumerados en los archivos xml tienen un atributo xsi:typeque determina cómo se interpreta el valor del argumento.
Por ejemplo, en el di.xmlarchivo del módulo de fondo hay esto:

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

Esto significa que el valor del argumento scopeTypees el valor de la constanteMagento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT

o este

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

Esto significa que el valor del argumento templatees la cadena Magento_Theme::root.phtml.

¿Cuáles son todos los valores posibles de este xsi:typeatributo?

Marius
fuente
¿Alguna vez ha tratado de usar un en staticlugar de un constpara tal argumento? Parece que no puedo encontrar un tipo que funcione para un staticcampo en mi clase :-(
peedee
No, no lo hice. Ni siquiera creo que no hay soporte parastatic
Marius

Respuestas:

36

He encontrado todos los tipos al registrar <xs:extension base="argumentType"archivos * .xsd.

lib/internal/Magento/Framework/Data/etc/argument/types.xsd, estos son tipos básicos :

  • " matriz "
  • " cadena "
  • " Boolean "
  • " objeto "
  • "objeto configurable "
  • " número "
  • " nulo "

lib/internal/Magento/Framework/ObjectManager/etc/config.xsd, se puede encontrar en di.xm l archivos:

  • " objeto "
  • " parámetro_inicial "
  • " const "

lib/internal/Magento/Framework/View/Layout/etc/elements.xsd, se puede encontrar en los archivos de diseño * .xml :

  • " opciones "
  • " url "
  • " ayudante "

Magento/Ui/etc/ui_components.xsd, se puede encontrar en los archivos * .xml de los componentes de la interfaz de usuario :

  • " constante "
  • " url "
Arkadii Chyzhov
fuente
14

Según mis investigaciones, esto es lo que he encontrado:

El intérprete de argumentos se crea en 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;
}

En este código, puede ver claramente que se utilizan diferentes intérpretes según el atributo de tipo del argumento \Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE:

  • booleano =>\Magento\Framework\Data\Argument\Interpreter\Boolean
  • cadena =>\Magento\Framework\Data\Argument\Interpreter\StringUtils
  • número =>\Magento\Framework\Data\Argument\Interpreter\Number
  • nulo =>\Magento\Framework\Data\Argument\Interpreter\NullType
  • objeto =>\Magento\Framework\Data\Argument\Interpreter\DataObject
  • const =>\Magento\Framework\Data\Argument\Interpreter\Constant
  • init_parameter => \Magento\Framework\App\Arguments\ArgumentInterpreter(tenga en cuenta que este toma el \Magento\Framework\Data\Argument\Interpreter\Constantparámetro as y no el parámetro constructor)

También se agrega un intérprete adicional sobre la marcha para manejar los tipos de matriz:

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

Nota: parece que el init_parametertipo solo se usa app\code\Magento\Store\etc\di.xmlpara iniciar algunas 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 en Digital Pianism
fuente