閱讀590 返回首頁    go 技術社區[雲棲]


magento1.4 -- 從新聞插件看出Magento開啟預編譯後對代碼的要求更加嚴格規範

       Scalena News這個新聞插件我用了很久了,在1.3時代使用中一直沒出問題,就也沒有去檢查它的代碼是否都是準確的。因為1.4的預編譯(Compilation)功能已經成熟,我在1.4安裝完Scalena News後開啟了編譯,這時訪問後台新聞管理菜單會報錯,提示Mage_Adminhtml_Controller_action這個類沒找到,檢查插件的Scalena_News_Adminhtml_NewsController這個文件後發現Mage_Adminhtml_Controller_action裏的action應該是大寫Action

 

   class Scalena_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_action { protected function _initAction() { ………………………………………… 

 

也就是說應該是class Scalena_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_Action,修改之後重新運行編譯後不再報錯。而即使不修改,隻要關閉編譯,同樣不會報錯。

        從這裏可以看出,未開編譯前Magento對代碼的規範並沒有那麼嚴格,甚至可以猜想在1.3時代有不少插件裏或者係統代碼有類似的不規範代碼因為不影響使用而沒被發現,但到了1.4時代,如果想要正常使用預編譯(Compilation)來提速,更規範的代碼編寫是必不可少了。我的建議是從一開始開發局開啟預編譯(Compilation),當然每次新裝插件或新寫了自己的模塊時要重新運行編譯,這樣每次發現有報錯可以及時的修改掉,如果一直沒開編譯,到項目全部做完在開啟,那時候可能會有一大把錯誤等著你去改,甚至混在一起無從下手。當然這是我根據目前的知識所作的推測。

之前好像有看到過一篇英文文章說,要開啟預編譯會要求所有的功能編寫按照Magento的標準模塊編寫方式,跳出框架自己寫代碼實現的功能有可能無法編譯,甚至報錯到無法使用編譯功能,比如在一個phtml文件中自己寫php代碼直接讀取數據庫等等。這一點我還未證實過,不過我覺得既然使用了Magento這個框架,按照Magento的規則去寫代碼還是有必要的,方便了自己也方便了別人看懂你的代碼,當然這就要求開發者需要更深入的了解magento自身的框架。

還有一個細節,在windows係統中開啟編譯,新聞管理是不會報錯的,因為windows係統文件和文件夾不區分大小寫,而一個Magento項目最終肯定是要在Linux的服務器上運行,所以一個建議是本地開發也搭建一個Linux環境做開發,才不會發生從windows轉移到linux是發現一堆大小寫帶來的錯誤。

最後更新:2017-04-02 06:51:17

  上一篇:go Adding a step to the Onepage Checkout
  下一篇:go ruby隨機在控製台顯示字符串