Je vois dans les di.xml
fichiers du noyau que certains des arguments ont le type init_parameter
mais les valeurs des paramètres sont toutes des 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 celui-ci
<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>
et plein d'autres.
Mais d'après ce que je vois dans l'interprète associé init_parameter
, l'interprète constant est utiliséMagento\Framework\App\Arguments\ArgumentInterpreter::evaluate
public function evaluate(array $data)
{
return ['argument' => $this->constInterpreter->evaluate($data)];
}
Mais le résultat est un peu différent du 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']);
}
Quelqu'un peut-il expliquer comment fonctionne le init_parameter
type et comment tout se passe sous le capot?
Quelles sont toutes les valeurs autorisées de «xsi: type» dans les xml de Magento2
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/di-xml-file.html
Format de nœud :
<argument xsi:type="init_parameter">{Constant::NAME}</argument>
Description : L'argument global d'une application représentée par
Constant::NAME
est recherché et passé en argument.Valeurs possibles : Constante l'argument global contenant le nom
Format de nœud :
<argument xsi:type="const">{Constant::NAME}</argument>
Description : Constant :: NAME passé en argument.
Valeurs possibles : Tous les noms de constantes sont possibles.
Prenons l'exemple ci-dessous.
magento \ vendor \ magento \ module-store \ etc \ di.xml
magento \ vendor \ magento \ module-store \ Model \ StoreResolver.php
L'idée est simple. Vous pouvez directement transmettre vos variables et sa valeur à partir du
di.xml
fichier. Au lieu de définir ces valeurs dans votre modèle.Donc, il vous suffit d'initialiser les variables ur et vous obtiendrez de la valeur de ur
di.xml
J'espère que cela aide
la source