While the concept of The Global Config still exists in Magento, a module’s
etc/config.xml is no longer the place where developers will enter most of a module’s configuration. In fact, if you try to use a Magento 1
config.xml file in Magento 2 and turn on developer mode, you’ll be greeted by the following.
Invalid XML in file /magento2/app/code/Packagename/Modulename/etc/config.xml: Element ‘modules’: This element is not expected. Expected is one of ( default, stores, websites ). Line: 3
That is, the only top level nodes allowed are
config.xml file has gone back to its roots, and may only be used to set defaults or scope specific values for the System Configuration variables.
So does that mean Magento’s greatly simplified its module system such that it no longer needs configuration?
Instead, all module configuration has been broken out into individual configuration files. For example, if you take a look at the
Magento_Core module, you’ll see the following configuration files
etc/cache.xml etc/config.xml etc/crontab.xml etc/di.xml etc/events.xml etc/frontend/di.xml etc/frontend/events.xml etc/frontend/routes.xml etc/module.xml etc/resources.xml
Events have their own
events.xml file — including an individual
events.xml file for the frontend area. There’s
di.xml files for dependency injection (Magento 2’s superior replacement for the class rewrite system), the old
<routers/> nodes are now
This change started in Magento 1, but Magento 2 makes it mandatory. Old configuration nodes in
config.xml are ignored, and developer mode enforces a strict format on the XML configuration files.
Making things extra tricky for folks migrating modules to Magento 2, the syntax of these files is different from Magento 1. For example, an event observer in Magento 1 looked like this
<catalog_prepare_price_select> <observers> <weee> <type>model</type> <class>weee/observer</class> <method>prepareCatalogIndexSelect</method> </weee> </observers> </catalog_prepare_price_select>
In Magento 2, an observer looks like this
<event name="catalog_entity_attribute_save_before"> <observer name="weee" instance="MagentoWeeeModelObserver" method="assignBackendModelToAttribute" shared="false" /> </event>
While not the most existing task in the world, migrating your configuration files to this new format is a step in the right direction. Magento 1’s
config.xml files could, over time, become unwieldy. Beyond reducing system complexity, this re-organization will help shed light on inefficient parts of Magento’s configuration system, and make individual sub-systems easier targets for refactoring efforts.
With any luck, tools will crop up for automatic migration, or maybe eBay/Magento will release their own, internal conversion scripts.