Pregunta de bonificación MageStackDay por 500 puntos Bounty Y la posibilidad de ganar una licencia gratuita de Z-Ray por un año. Más información se puede encontrar >> aquí <<
Las preguntas son proporcionadas / inspiradas por el desarrollador principal de Magento 2, Anton Kril.
Pregunta:
Estoy creando una extensión que tiene un conjunto separado de configuraciones.
Esto significa que no pueden utilizar config.xmlo routes.xmlo fieldset.xmlo cualquier otro archivo de configuración XML Magento tiene.
Ejemplo.
Digamos que estoy definiendo una configuración de 'tabla' que tiene filas y columnas. Podría usar este xml a continuación. (llámalo 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>
Pero si otra extensión contiene table.xml, quiero que sea recogida por el lector de configuración y los 2 o más archivos xml deben fusionarse. Quiero decir, si el segundo archivo se ve así
<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>
el resultado será que la segunda columna se agrega a la primera fila y attr1el segundo xml sobrescribe el valor de :
<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>
En Magento 1 podría haber hecho esto simplemente llamando
$merged = Mage::getConfig()->loadModulesConfiguration('table.xml')
->applyExtends();
¿Cómo puedo hacer lo mismo para Magento 2?
fuente

Domun ejemplo de clase. Comencé a trabajar en la respuesta utilizando laReaderclase. Mientras tanto, actualicé la página de preguntas y me di cuenta de que hiciste eso :-) +1