Pergunta de bônus do MageStackDay para 500pts Bounty E a possibilidade de ganhar uma licença Z-Ray gratuita por um ano. Mais informações podem ser encontradas >> aqui <<
As perguntas são fornecidas / inspiradas pelo desenvolvedor principal do Magento 2, Anton Kril.
Questão:
Estou criando uma extensão que possui um conjunto separado de configurações.
Isso significa que eu não posso usar config.xml
ou routes.xml
ou fieldset.xml
ou quaisquer outros arquivos de configuração XML magento tem.
Exemplo.
Digamos que estou definindo uma configuração de 'tabela' que possui linhas e colunas. Eu poderia usar este xml abaixo. (chame table.xml
)
<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="path/to/table.xsd">
<row id="row1">
<column id="col1" sort="10" attr1="val1">
<label>Col 1</label>
</column>
</row>
<row id="row2">
<column id="col1" sort="10" attr1="val1">
<label>Col 1</label>
</column>
<column id="col2" sort="20" disabled="true" attr1="val2" >
<label>Col 2</label>
</column>
<column id="col3" sort="15" attr1="val1">
<label>Col 3</label>
</column>
</row>
</table>
Mas se uma outra extensão contiver table.xml
, quero que ela seja selecionada pelo leitor de configuração e os 2 ou mais arquivos xml deverão ser mesclados. Quero dizer, se o segundo arquivo for assim
<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="path/to/table.xsd">
<row id="row1">
<column id="col2" sort="10" attr1="val2">
<label>Col 2</label>
</column>
</row>
<row id="row2">
<column id="col1" sort="10" attr1="val5" />
</row>
</table>
o resultado será que a segunda coluna será adicionada à primeira linha e o valor de attr1
será substituído pelo segundo xml:
<table ....>
<row id="row1">
<column id="col1" sort="10" attr1="val1"> <!-- from first xml -->
<label>Col 1</label>
</column>
<column id="col2" sort="10" attr1="val2"><!-- from second xml-->
<label>Col 2</label>
</column>
</row>
<row id="row2">
<column id="col1" sort="10" attr1="val5"><!--they apear in both xmls with the same path and id and second one overrides the value for `attr1`-->
<label>Col 1</label>
</column>
<column id="col2" sort="20" disabled="true" attr1="val2"><!-- from first xml -->
<label>Col 2</label>
</column>
<column id="col3" sort="15" attr1="val1"><!-- from first xml -->
<label>Col 3</label>
</column>
</row>
</table>
No Magento 1, eu poderia ter feito isso apenas chamando
$merged = Mage::getConfig()->loadModulesConfiguration('table.xml')
->applyExtends();
Como posso fazer o mesmo com o Magento 2?
Dom
exemplo de classe. Comecei a trabalhar na resposta utilizandoReader
classe. Enquanto isso