Понимание замены аргумента диспетчера объектов с помощью di.xml для команд
-
28-09-2020 - |
Вопрос
Я следую за тобой замена аргумента диспетчера объектов руководство.Один из возможных di.xml выглядит как
<type name="Pulsestorm\TutorialObjectManagerArguments\Model\Example">
<arguments>
<argument name="scaler1" xsi:type="string">bar</argument>
</arguments>
</type>
Что означает в модели Example
конструктор класса, заменяющий (любое старое) значение аргумента $scaler1
с bar
.
Принимая во внимание, что для команд это выглядит как
<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>
В котором говорится добавить 1 новый элемент (команду) в CommandList
аргумент конструктора commands
(который имеет тип массива).
Я не вижу смысла в этом названии testbedCommand
в любом месте модуля.Каково будет его использование?Должно ли оно быть уникальным?
Решение
Имя элемента не используется в Magento\Framework\Console\CommandList.Если вы заглянете в этот класс, то увидите, что используются только значения, однако ключи массива также доступны.
Если вы определяете в своем модуле элемент того же типа и с тем же именем аргумента:
<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>
и ваш модуль идет после Pulsestorm utorialObjectManagerArguments, тогда в качестве аргумента вы получите свое значение:
<argument name="commands" xsi:type="array">
<item name="testbedCommand" xsi:type="object">Your\Module\Command\Testbed</item>
</argument>