“約定優於配置”與Magento改造嘗試三之routerName加載

上一章引入了一個自定義的概念叫模塊的別名(alias),這章沿用這個概念來處理routerName的加載。

    <modules>
        <Mage_Wishlist>
            <version>1.6.0.0</version>
            <alias>wishlist</alias>
        </Mage_Wishlist>
    </modules>


常見的路由(router)定義如下


        <routers>
            <wishlist>
                <use>standard</use>
                <args>
                    <module>Mage_Wishlist</module>
                    <frontName>wishlist</frontName>
                </args>
            </wishlist>
        </routers>

很自然的發現<frontName>的值wishlist與該模塊其它別名都是一致的(不一致的情況下面會講到),那麼這次改造的目的就是,直接用通用的別名來取代這一整段路由配置。

因爲路由這個東西很明顯存在需要自定義的需求(即前端網頁url自定義的需求),所以類似於對佈局xml文件的處理,這裏的改造方式保留了上面這種人爲指定路由的配置方式,在沒有人爲指定路由時,採用模塊的別名作爲路由名。(其實“佈局xml文件”是否保留自定義配置我覺得可以商榷,但路由的自定義是必須保留的)

需要修改的文件是Mage_Core_Controller_Varien_Router_Standard,詳見

https://github.com/walexer/Yli_Coc/blob/master/app/code/local/Mage/Core/Controller/Varien/Router/Standard.php

主要修改的方法是:public function collectRoutes($configArea, $useRouterName)


如上文所言,經過這次修改之後,用戶依然可以人爲指定路由名,不需要指定的(跟別名一致的),可以刪除類似如下的xml片段

        <routers>
            <wishlist>
                <use>standard</use>
                <args>
                    <module>Mage_Wishlist</module>
                    <frontName>wishlist</frontName>
                </args>
            </wishlist>
        </routers>

從實際工作經驗來說,有人爲指定跟別名不一致的路由名的模塊是個別少數,大部分模塊都可以省下這一段xml配置了。


好了,請期待下一章!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章