Veo en los di.xml
archivos del núcleo que algunos de los argumentos tienen el tipo, init_parameter
pero los valores de los parámetros son 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>
o 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>
y muchos otros.
Pero por lo que veo en el intérprete asociado init_parameter
, se usa el intérprete constanteMagento\Framework\App\Arguments\ArgumentInterpreter::evaluate
public function evaluate(array $data)
{
return ['argument' => $this->constInterpreter->evaluate($data)];
}
Pero el resultado es un poco diferente del 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']);
}
¿Alguien puede explicar por favor cómo funciona el init_parameter
tipo y cómo sucede todo bajo el capó?
¿Cuáles son todos los valores permitidos de `xsi: type` en los xml de Magento2
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/di-xml-file.html
Formato de nodo :
<argument xsi:type="init_parameter">{Constant::NAME}</argument>
Descripción : El argumento global de una aplicación representada por
Constant::NAME
se busca y se pasa como argumento.Valores posibles : Constante el argumento global que contiene el nombre
Formato de nodo :
<argument xsi:type="const">{Constant::NAME}</argument>
Descripción : Constante :: NOMBRE pasado como argumento.
Valores posibles : todos los nombres constantes son posibles.
Tomemos el siguiente ejemplo.
magento \ vendor \ magento \ module-store \ etc \ di.xml
magento \ vendor \ magento \ module-store \ Model \ StoreResolver.php
La idea es simple. Puede pasar directamente sus variables y su valor desde el
di.xml
archivo. En lugar de definir esos valores en su modelo.Así que solo necesita inicializar sus variables y obtendrá valor de su
di.xml
Espero eso ayude
fuente