Vejo nos di.xml
arquivos do núcleo que alguns dos argumentos têm o tipo, init_parameter
mas os valores dos parâmetros são todas constantes.
<type name="Magento\Framework\View\Page\Config\Renderer">
<arguments>
<argument name="appMode" xsi:type="init_parameter">Magento\Framework\App\State::PARAM_MODE</argument>
</arguments>
</type>
ou este
<type name="Magento\Framework\App\Cache\State">
<arguments>
<argument name="banAll" xsi:type="init_parameter">Magento\Framework\App\Cache\State::PARAM_BAN_CACHE</argument>
</arguments>
</type>
e muitos outros.
Mas pelo que vejo no intérprete associado init_parameter
, o intérprete constante é usadoMagento\Framework\App\Arguments\ArgumentInterpreter::evaluate
public function evaluate(array $data)
{
return ['argument' => $this->constInterpreter->evaluate($data)];
}
Mas o resultado é um pouco diferente do Magento\Framework\Data\Argument\Interpreter\Constant::evaluate
public function evaluate(array $data)
{
if (!isset($data['value']) || !defined($data['value'])) {
throw new \InvalidArgumentException('Constant name is expected.');
}
return constant($data['value']);
}
Alguém pode explicar por favor como o init_parameter
tipo funciona e como tudo acontece sob o capô?
Quais são todos os valores permitidos `xsi: type` nos xml's do Magento2
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/di-xml-file.html
Formato do nó :
<argument xsi:type="init_parameter">{Constant::NAME}</argument>
Descrição : o argumento global de um aplicativo representado por
Constant::NAME
é pesquisado e passado como argumento.Valores possíveis : Constante o nome global contendo argumento
Formato do nó :
<argument xsi:type="const">{Constant::NAME}</argument>
Descrição : Constant :: NAME passado como argumento.
Valores possíveis : Todos os nomes de constantes são possíveis.
Vamos dar um exemplo abaixo.
magento \ fornecedor \ magento \ loja de módulos \ etc \ di.xml
magento \ fornecedor \ magento \ módulo-loja \ Model \ StoreResolver.php
A ideia é simples. Você pode passar diretamente suas variáveis e seu valor do
di.xml
arquivo. Em vez de definir esses valores em seu modelo.Então você só precisa inicializar suas variáveis e você obterá valor delas
di.xml
Espero que ajude
fonte