Magento管理员路由不起作用

时间:2011-06-17 16:51:14

标签: php magento

我正在为Magento的管理区域开发一个模块。我正试图在Magento admin controllers上关注Alan Storm的教程,但似乎无法让我的控制器做任何事情。我认为它可能与路由有关,但我不确定。它向我显示了404错误的前端模板。

(注意:我在此处已包含所有相关代码。实际问题位于最底层。

该模块名为Mynamespace_Donor,位于app / code / local / Mynamespace / Donor /.

我的etc / config.xml如下所示:

<?xml version="1.0"?>
<config>
    <modules>
        <Mynamespace_Donor>
            <version>0.1.0</version>
        </Mynamespace_Donor>
    </modules>
    <global>
        <helpers>
            <donor>
                <class>Mynamespace_Donor_Helper</class>
            </donor>
        </helpers>
        <resources>
            <donor_setup>
                <setup>
                    <module>Mynamespace_Donor</module>
                </setup>
            </donor_setup>
        </resources>
    </global>

    <admin>
        <routers>
            <donor>
                <use>admin</use>
                <args>
                    <module>Mynamespace_Donor</module>
                    <frontname>donor</frontname>
                </args>
            </donor>
        </routers>
    </admin>

    <adminhtml>
        <menu>
            <donor translate="title" module="donor">
                <title>Donor</title>
                <sort_order>42</sort_order>
                <children>
                    <manage_donors module="donor">
                        <title>Manage Donors</title>
                        <action>donor/index/index</action>
                    </manage_donors>
                </children>
            </donor>
        </menu>
    </adminhtml>
</config>

我的控制器/ IndexController.php看起来像这样:

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

        //create a text block with the name of "example-block"
        $block = $this->getLayout()
        ->createBlock('core/text', 'example-block')
        ->setText('<h1>This is a text block</h1>');

        $this->_addContent($block);

        $this->renderLayout();
    }
}

菜单项指向/index.php/donor/index/index/key/e98a...,显示404页面。当我尝试直接转到/donor/index.php/donor/index.php/donor/index等时,我仍然会收到404错误。

如果我从配置中删除<helpers>,Magento会抱怨它无法找到它。如果我删除了<adminhtml>部分,它会停止抱怨,即使我仍然有<admin><routers>部分(不知道路由内容是否需要帮助,或者这是否相关)。< / p>

我也尝试在<adminhtml>下添加此块,但是当我尝试编辑角色权限时,我会收到一个包含此错误的白页:Fatal error: Class 'Mage_Mynamespace_Donor_Helper_Data' not found in /home/mysite/public_html/magento_dev_1_10/app/Mage.php on line 520

<acl>
    <resources>
        <admin>
            <children>
                <donor translate="title" module="Mynamespace_Donor">
                    <title>Donors</title>
                    <sort_order>60</sort_order>
                    <children>
                        <manage_donors>
                            <title>Manage Donors</title>
                        </manage_donors>
                    </children>
                </donor>
            </children>
        </admin>
    </resources>
</acl>

问题:我在这里做错了什么?为什么我不能访问这个控制器?

最后,在Alan的示例代码中,URL以模块名称开头,但我希望我的开头是/admin/donor而不是/donor。我需要做些什么改变?


修改1 最终目标是在管理区域中有一个新选项卡,用于管理系统中的捐赠者和相关数据。当你点击一些菜单项时,我想显示一个网格,并有子标签和类似的东西。我想要覆盖adminhtml控制器 - 虽然我按Alan's suggestion扩展它:

  

与标准的唯一区别   这里的控制器是我们的   扩展   Mage_Adminhtml_Controller_Action   代替   Mage_Core_Controller_Varien_Action。   Mage_Adminhtml_Controller_Action   包含验证的重要代码   管理员会话,以及几个   在管理员中有用的方法   控制台上下文。

因此,在这张图片中,点击第一个子菜单项应该调用我的控制器的索引操作,并显示一个网格或其他东西来管理捐赠者。

The menu

3 个答案:

答案 0 :(得分:7)

尝试替换:

<frontname>donor</frontname>

with:

<frontName>donor</frontName>

这将解决您的404错误。

答案 1 :(得分:5)

<config>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <mynamespace_donor before="Mage_Adminhtml">Mynamespace_Donor</mynamespace_donor>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>

在config.xml中尝试以上内容

更多详情:

http://prattski.com/2010/06/24/magento-overriding-core-files-blocks-models-resources-controllers/

答案 2 :(得分:2)

关于致命错误;您的权限中包含module="Mynamespace_Donor"。如果你看看Alan的教程,他就有:

<tutorial_menu translate="title" module="adminhelloworld">

他使用模块别名而不是模块名称 - adminhelloworld而不是Alanstormdotcom_Adminhelloworld。 Magento正试图寻找与翻译标题相关的帮手。在您的情况下,您需要:

<donor translate="title" module="donor">

donor来自您自己的配置文件:

<helpers>
    <donor> <!-- <<< This is the alias "donor" -->
        <class>Mynamespace_Donor_Helper</class>
    </donor>
</helpers>
相关问题