Magento管理员路由扩展导致404

Jan*_*aek 0 magento

我目前正在参与学习和开发magento,并且我得到了为前端工作的东西,但是现在我正在尝试让后端工作的东西和我面临挑战.根据文档和谷歌,它应该很简单,但我仍然得到404s.

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

app
  code
    local
      Mediafunction
        Csvengine
          Block
          controllers
            Adminhtml  
              IndexController.php
          etc
            config.xml
          Helper
            Data.php
          Model
          sql
Run Code Online (Sandbox Code Playgroud)

我在config.xml中添加了一些东西,得到一个链接到菜单,它的实际工作所展示的模块,但是当IM点击喜欢的链接(其解析为/管理/ csvengine /索引/键/ foobar的,应),我刚刚得到一个404.

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

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <Mediafunction_Csvengine before="Mage_Adminhtml">Mediafunction_Csvengine_Adminhtml</Mediafunction_Csvengine>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
Run Code Online (Sandbox Code Playgroud)

目前不起作用(404).我的IndexController.php非常简单,它的唯一内容是:

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

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

ben*_*rks 6

你有两个简单的问题要解决:-)

第一:资本化.每个模块文件和目录(除了controllers,etc/*,data/*,和sql/*必须是大写的大小写的文件系统.这样做的原因是直接实施,在该方式的组合Varien_Autoload发现基于类名类定义(前者适用于行动虽然控制器类.这只是意味着你的模块应该是Csvengine而不是csvengine,你必须在文件名和模块声明节点中实现它modules/Mediafunction_Csvengine.

第二:你的adminhtml控制器方法几乎是正确的.根据您的类名,您需要在controllersnamed 下有一个文件夹Adminhtml.您还需要更新的价值admin/routers/adminhtml/args/modules/Mediafunction_csvengineMediafunction_Csvengine,因为这将被用来随着模块的codepool找到你的动作控制器目录.请参阅Mage_Core_Controller_Varien_Router_Standard::collectRoutes()config-to-directory逻辑.


编辑:

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

http://site.com/thisisparttwo/thisispartthree/thisispartfour/foo/1/bar/2/
Base URL       |front name   |controller path|method        | params...
Run Code Online (Sandbox Code Playgroud)

您的控制器路径指向管理员前缀下的CsvengineController类.你已经配置了一个控制器目录(我的更改)Mediafunction/Csvengine/controllers/Adminhtml/,所以你需要一个CsvengineController.php,它包含一个名为的类Mediafunction_Csvengine_Adminhtml_CsvengineController

另外一个注意事项:Magento的管理ACL通过该Mage_Adminhtml_Controller_Action::_isallowed()方法工作 - 无需在控制器中重新实现,所有管理员用户的访问权限都不受限制.