Бонусный вопрос MageStackDay для 500 Bounty И возможность выиграть бесплатную лицензию Z-Ray в течение года. Более подробную информацию можно найти здесь >>
Вопросы предоставлены / вдохновлены разработчиком ядра Magento 2 Антоном Крилом.
Вопрос:
Я создаю расширение, которое имеет отдельный набор конфигураций.
Это означает , что я не могу использовать config.xml
или routes.xml
или fieldset.xml
или любые другие конфигурации XML файлы Magento имеет.
Пример.
Допустим, я определяю конфигурацию 'table', в которой есть строки и столбцы. Я мог бы использовать этот XML ниже. (позвони 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>
Но если другое расширение содержит, table.xml
я хочу, чтобы это было подхвачено читателем конфигурации, и 2 или больше файла XML должны быть объединены. Я имею в виду, если второй файл выглядит так
<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>
В результате второй столбец будет добавлен в первую строку, а значение для attr1
будет перезаписано вторым 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>
В Magento 1 я мог бы сделать это, просто позвонив
$merged = Mage::getConfig()->loadModulesConfiguration('table.xml')
->applyExtends();
Как я могу сделать то же самое для Magento 2?
Dom
примером класса. Я начал работать над ответом, используяReader
класс. Тем временем я обновил страницу с вопросом и понял, что ты это сделал :-) +1