Magento管理员路由扩展导致404

时间:2012-02-09 13:07:09

标签: magento

我目前正在参与学习和开发magento,我有一些工作为前端工作,但现在我正在尝试为后端工作,我面临挑战。根据文档和谷歌,它应该很简单,但我仍然得到404s。

我创建了一个标准的文件结构,如下所示:

app
  code
    local
      Mediafunction
        Csvengine
          Block
          controllers
            Adminhtml  
              IndexController.php
          etc
            config.xml
          Helper
            Data.php
          Model
          sql

我在config.xml中添加了一些东西来获取菜单中显示的模块的链接,这实际上有效,但是当我点击链接时(解析为/ admin / csvengine / index / key / foobar,就像它应该),我只是得到一个404。

我尝试了各种各样的东西,但我一直回到:

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <Mediafunction_Csvengine before="Mage_Adminhtml">Mediafunction_Csvengine_Adminhtml</Mediafunction_Csvengine>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

目前无效(404)。我的IndexController.php非常简单,它的唯一内容是:

<?php
class Mediafunction_Csvengine_Adminhtml_IndexController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        $this->loadLayout();
        $this->renderLayout();
    }
}

更改类的名称也没有任何效果,我真的对我做错了什么一无所知。我怎样才能使这个工作?

1 个答案:

答案 0 :(得分:6)

您需要解决两个简单问题: - )

第一:资本化。对于区分大小写的文件系统,每个模块文件和目录(controllersetc/*data/*sql/*都必须大写。这是两个直接组合的原因实现以及Varien_Autoload基于类名找到类定义的方式(前者适用于动作控制器类)。这只是意味着你的模块应该是Csvengine而不是csvengine,你必须在文件中实现它名称以及模块声明节点modules/Mediafunction_Csvengine

第二:你的adminhtml控制器方法几乎是正确的。根据您的班级名称,您需要在名为controllers的{​​{1}}下设置一个文件夹。您还需要将Adminhtml的值更新为admin/routers/adminhtml/args/modules/Mediafunction_csvengine,因为这将与模块的代码池一起使用以查找您的操作控制器目录。有关config-to-directory逻辑,请参阅Mediafunction_Csvengine


修改

我忽略了指出你的路线(admin / csvengine / index)和控制器文件名的问题。在标准的路由到控制器映射中,Magento URL有五个区域:

Mage_Core_Controller_Varien_Router_Standard::collectRoutes()

您的控制器路径指向管理员名称下的CsvengineController类。您已将控制器目录(我的更改)配置为http://site.com/thisisparttwo/thisispartthree/thisispartfour/foo/1/bar/2/ Base URL |front name |controller path|method | params... ,因此您需要一个包含名为Mediafunction/Csvengine/controllers/Adminhtml/的类的CsvengineController.php

另外一个注意事项:Magento的管理ACL通过Mediafunction_Csvengine_Adminhtml_CsvengineController方法工作 - 无需在控制器中重新实现,所有管理员用户都可以不受限制地访问路径。