Over Magento 2’s long gestation period, there’s been a lot of back and forth on its backwards compatibility. At this point, there would need to be a major engineering effort for out of the box API compatibility with Magento 1. Extension developers will need to resign themselves to some refactoring to get their extensions working. While certainly a pain in the behind, one positive effect of this will be a flushing out of certain fly-by-night extension vendors who aren’t in it for the long haul.
The first major change I’ve found is Magento 2 has removed the loadModulesConfiguration
method from the Mage_Core_Model_Config
object. Instead, if you need to read and merge every module’s xml
configuration file, there’s a new configuration reader object. You can invoke it like this
$loaded_config = Mage::getSingleton('Mage_Core_Model_Config_Modules_Reader')
->loadModulesConfiguration('system.xml');
Here’s another difference: In Magento 1.0 this method returns a Mage_Core_Model_Config_Element
object, which inherits from Varien_Simplexml_Element
, which inherits from the base PHP SimpleXMLElement
.
In Magento 2 this method returns a Mage_Core_Model_Config_Base
object, which inherits from Varien_Simplexml_Config
, which inherits from nothing. This means the configuration objects you fetch from loadModulesConfiguration
no longer have API compatibility with PHP’s simplexml object. Behind the scenes Magento is still using a simple xml extended Varien_Simplexml_Element
to handle things. You can fetch the Varien_Simplexml_Element
object from a Mage_Core_Model_Config_Element
with the getNode
method and you’ll have access to all the simple xml methods.
$simple_xml_compat = $loaded_config->getNode();
Be careful though — I’ve noticed some differences when using the xpath
method on this returned node when making method calls like this
$simple_xml_compat->xpath('*');
and I haven’t had time to untangle why the behavior is different.
If you’re interested in this sort of thing, you may be interested in the Magento 1 article series In Depth Magento Dispatch.