Quais são todos os valores permitidos `xsi: type` nos xml's do Magento2

20

No Magento 2 (quase) todos os argumentos listados nos arquivos xml têm um atributo xsi:typeque determina como o valor do argumento é iterado.
Por exemplo, no di.xmlarquivo do módulo backend, existe o seguinte:

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

isso significa que o valor do argumento scopeTypeé o valor da constanteMagento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT

ou este

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

isso significa que o valor do argumento templateé a sequência Magento_Theme::root.phtml.

Quais são todos os valores possíveis desse xsi:typeatributo?

Marius
fonte
Você já tentou usar um em staticvez de um constpara esse argumento? Parece que não consigo encontrar um tipo que funcione para um staticcampo da minha classe :-(
peedee 16/12/16
Não, eu não fiz. Eu nem acho que há suporte parastatic
Marius

Respostas:

36

Encontrei todos os tipos verificando <xs:extension base="argumentType"arquivos * .xsd.

lib/internal/Magento/Framework/Data/etc/argument/types.xsd, estes são tipos básicos :

  • " matriz "
  • " string "
  • " booleano "
  • " objeto "
  • " configurableObject "
  • " número "
  • " nulo "

lib/internal/Magento/Framework/ObjectManager/etc/config.xsd, pode ser encontrado nos arquivos di.xm l:

  • " objeto "
  • " init_parameter "
  • " const "

lib/internal/Magento/Framework/View/Layout/etc/elements.xsd, pode ser encontrado nos arquivos de layout * .xml :

  • " opções "
  • " url "
  • " ajudante "

Magento/Ui/etc/ui_components.xsd, pode ser encontrado nos arquivos * .xml dos componentes da interface do usuário :

  • " constante "
  • " url "
Arkadii Chyzhov
fonte
14

De acordo com minhas pesquisas, aqui está o que eu encontrei:

O intérprete de argumento é criado no 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;
}

Neste código, você pode ver claramente que diferentes intérpretes são usados ​​com base no atributo type do argumento \Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE:

  • booleano =>\Magento\Framework\Data\Argument\Interpreter\Boolean
  • string =>\Magento\Framework\Data\Argument\Interpreter\StringUtils
  • number =>\Magento\Framework\Data\Argument\Interpreter\Number
  • null =>\Magento\Framework\Data\Argument\Interpreter\NullType
  • object =>\Magento\Framework\Data\Argument\Interpreter\DataObject
  • const =>\Magento\Framework\Data\Argument\Interpreter\Constant
  • init_parameter => \Magento\Framework\App\Arguments\ArgumentInterpreter(observe que este aceita o \Magento\Framework\Data\Argument\Interpreter\Constantparâmetro as e não o construtor)

Além disso, um intérprete extra é adicionado rapidamente para lidar com os tipos de matriz:

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

Nota: parece que o init_parametertipo é usado apenas app\code\Magento\Store\etc\di.xmlpara iniciar algumas 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 na Digital Pianism
fonte