Magento新建组件控制器不生效或 404

作者:袖梨 2022-06-24

检查链接是否有错误

链接错误通常有两个可能,一个是拼写错误;另一个是后台开启了将 store view code 加在链接里,但测试的时候没有写到地址栏 – -

检查组件是否已打开

有的时候因为某些原因组件没有被开启,这样相关的控制器自然不可用了。可以到后台 System / Configuration > ADVANCED / Advanced 查找组件是否存在于列表中。

如果组件确实没有打开,一般都是配置文件或者程序的拼写问题导致的。特别是那种本地可用但放到服务器上出问题的,百分之七十都是因为大小写不正确 – -

检查组件的 config.xml 配置文件

以原生产品组件为例,前台控制器的配置方式如下:


    ...
   
       
           
                standard
               
                    Mage_Catalog
                    catalog
               

           

       

   

    ...

如果需要重写这个控制器,可以这样配置:


    ...
   
       
           
               
                   
                        Infinity_Catalog
                   

               

           

       

   

    ...

 

检查组件及控制器的文件名、类名、方法名

Magento 的组件目录有两个控制器相关的文件夹,一个是 Controller,另一个是 controllers。前者一般是用来定义路由方法的,似乎比较少用到;后者才是控制器安放的地方。与其他常用部件(Block、Helper、Model)不同,控制器文件夹的首字母是小写,且末尾有个 s(很想吐槽做架构那位是暗恋小s么,好吧我知道你 “小” 是因为重写方法跟 “大” 的不一样,“s” 是用来跟 Controller 作区分)。

控制器的文件名是


[控制器名(首字母大写)]Controller.php

比如原生产品前台控制器文件名为 ProductController.php。也是跟其他常用部件(Block、Helper、Model)不一样,后边带了个 Controller。

控制器的类名是


[命名空间(首字母大写)]_[组件名(首字母大写)]_[控制器名(首字母大写)]Controller
比如原生产品前台控制器类名为 Mage_Catalog_ProductController。还是跟其他常用部件(Block、Helper、Model)不一样,把 “Controller” 这个特征名词放到了类名末尾,而不是 [组件名] 之后。

行为的方法名是


[行为(首字母小写)]Action

且该方法必须是 public 的,一般不带参。比如原生前台产品详细页方法名这样定义的:public function viewAction()。


通过插入代码检查

一般来说通过以上几步就可以解决问题了,如果还是不行的话就要到以下两个方法中插入 log 代码,检查相关的模块、控制器、行为是否出了什么问题。

Mage_Core_Controller_Varien_Router_Standard::match
Mage_Core_Controller_Varien_Front::dispatch

相关文章

精彩推荐