¿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?


¿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 "

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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.