Noções básicas sobre substituição de argumentos do gerenciador de objetos usando di.xml para comandos
-
28-09-2020 - |
Pergunta
estou seguindo substituição de argumento do gerenciador de objetos tutorial.Um dos possíveis di.xml se parece com
<type name="Pulsestorm\TutorialObjectManagerArguments\Model\Example">
<arguments>
<argument name="scaler1" xsi:type="string">bar</argument>
</arguments>
</type>
O que significa no modelo Example
construtor da classe, substitua o valor (qualquer antigo) do argumento $scaler1
com bar
.
Enquanto para comandos parece
<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>
Que diz adicionar 1 novo item (comando) em CommandList
argumento do construtor commands
(que é do tipo array).
Não vejo uso do nome testbedCommand
em qualquer lugar do módulo.Qual será seu uso?Deveria ser único?
Solução
Um nome de item não é usado em Magento\Framework\Console\CommandList.Se você olhar para esta classe, verá que apenas valores são usados, no entanto, chaves de array também estão disponíveis.
Se você definir em seu módulo o mesmo tipo e com o mesmo nome de item de argumento:
<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>
e seu módulo vai depois de Pulsestorm utorialObjectManagerArguments, então como argumento você obterá seu valor:
<argument name="commands" xsi:type="array">
<item name="testbedCommand" xsi:type="object">Your\Module\Command\Testbed</item>
</argument>