有半年没写东西了吧 不是没继续学 确实是懒了 好吧 言归正传!
Magento的路由主要为了完成以下三个任务:
1.接收并处理浏览器数据讲它传送给系统的其他部分;
2.定义controller和action来供routes使用;
3.展示浏览器请求数据给blocks,templates和model数据。
其中最核心的前端Controller是Mage_Core_Controller_Varien_Front 初次调用是通过Mage_Core_Model_App的run()方法来进行实例化的:$this->getFrontController()->dispatch();
而Varien_Front的实例化是通关自身的init()方法,首先读取core/etc/config.xml这个配置文件的stores/default/web/routers节点,默认配置有admin和frontend两个,接着通过监听controller_front_init_routers事件读取cms/etc/config.xml的路由配置为cms,最后实例化默认的前端路由Mage_Core_Controller_Varien_Router_Default。因此路由的优先级别依次是admin -> frontend -> cms -> default.
Dispatch()这个方法首先会检查URL,然后读写URL rewrite的XML配置,然后循环100次来匹配所请求的Router,最后响应请求。
按照上面的思路把代码追踪一遍应该会清楚很多,代码我就不贴了。
Cheers!