Grundlegendes zum Ersetzen von Objektmanagerargumenten mithilfe von di.xml für Befehle
-
28-09-2020 - |
Frage
Ich folge Ersetzen von Objektmanagerargumenten Lernprogramm.Eine der möglichen di.xml sieht so aus
<type name="Pulsestorm\TutorialObjectManagerArguments\Model\Example">
<arguments>
<argument name="scaler1" xsi:type="string">bar</argument>
</arguments>
</type>
Was im Modell bedeutet Example
Der Konstruktor der Klasse ersetzt den (egal alten) Wert des Arguments $scaler1
mit bar
.
Bei Befehlen hingegen sieht es so aus
<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>
Das heißt, 1 neues Element (Befehl) hinzufügen CommandList
Konstruktorargument commands
(das vom Array-Typ ist).
Ich sehe keine Verwendung des Namens testbedCommand
irgendwo im Modul.Welchen Zweck wird es haben?Soll es einzigartig sein?
Lösung
In Magento\Framework\Console\CommandList wird kein Elementname verwendet.Wenn Sie sich diese Klasse ansehen, können Sie sehen, dass nur Werte verwendet werden, jedoch auch Array-Schlüssel verfügbar sind.
Wenn Sie in Ihrem Modul denselben Typ und denselben Argumentelementnamen definieren:
<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>
und Ihr Modul geht nach Pulsestorm utorialObjectManagerArguments, dann erhalten Sie als Argument Ihren Wert:
<argument name="commands" xsi:type="array">
<item name="testbedCommand" xsi:type="object">Your\Module\Command\Testbed</item>
</argument>