Comprendre le remplacement des arguments du gestionnaire d'objets à l'aide de di.xml pour les commandes
-
28-09-2020 - |
Question
je suis remplacement des arguments du gestionnaire d'objets Didacticiel.L'un des di.xml possibles ressemble à
<type name="Pulsestorm\TutorialObjectManagerArguments\Model\Example">
<arguments>
<argument name="scaler1" xsi:type="string">bar</argument>
</arguments>
</type>
Ce qui signifie dans le modèle Example
Le constructeur de la classe, remplace la valeur (quelle qu'elle soit) de l'argument $scaler1
avec bar
.
Alors que pour les commandes, cela ressemble à
<type name="Magento\Framework\Console\CommandList">
<arguments>
<argument name="commands" xsi:type="array">
<item name="testbedCommand" xsi:type="object">Pulsestorm\TutorialObjectManagerArguments\Command\Testbed</item>
</argument>
</arguments>
</type>
Ce qui dit d'ajouter 1 nouvel élément (commande) dans CommandList
L'argument constructeur de commands
(qui est de type tableau).
Je ne vois pas l'utilité du nom testbedCommand
n'importe où dans le module.Quelle sera son utilité ?Doit-il être unique ?
La solution
Un nom d'élément n'est pas utilisé dans Magento\Framework\Console\CommandList.Si vous examinez cette classe, vous pouvez voir que seules les valeurs sont utilisées, mais que les clés du tableau sont également disponibles.
Si vous définissez dans votre module le même type et avec le même nom d'élément d'argument :
<type name="Magento\Framework\Console\CommandList">
<arguments>
<argument name="commands" xsi:type="array">
<item name="testbedCommand" xsi:type="object">Your\Module\Command\Testbed</item>
</argument>
</arguments>
</type>
et votre module va après Pulsestorm utorialObjectManagerArguments, puis comme argument vous obtiendrez votre valeur :
<argument name="commands" xsi:type="array">
<item name="testbedCommand" xsi:type="object">Your\Module\Command\Testbed</item>
</argument>