1

我添加了管理控制器。此代码工作正常:

    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <mycompany_mymodule>Mycompany_Mymodule_Adminhtml</mycompany_mymodule >
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>

如果我将 before="Mage_Adminhtml" 添加到 mycompany_mymodule:

<mycompany_mymodule before="Mage_Adminhtml">Mycompany_Mymodule_Adminhtml</mycompany_mymodule >

然后它不起作用 - 出现 404 错误。

1. 这个选项有什么作用?

我还浏览了 Alans 的 Storm 文章:http ://alanstorm.com/magento_admin_controllers 有示例:

<config>
    <!-- ... -->
    <admin>
        <routers>
            <the_name_of_this_element_is_not_important_it_should_be_unique>
                <use>admin</use>
                <args>
                    <module>Alanstormdotcom_Adminhelloworld</module>
                    <frontName>adminhelloworld</frontName>
                </args>
            </the_name_of_this_element_is_not_important_it_should_be_unique>
        </routers>
    </admin>
    <!-- ... -->        
</config>

2. 这些定义有什么区别?

4

1 回答 1

3

它解决了:

我找到了定义方法的Mage_Core_Controller_Varien_Router_StandardcollectRoutes()。它解析“after”和“before”参数以对模块进行排序。

此方法调用自Mage_Core_Controller_Varien_Router_Admin(从init方法 in开始Mage_Core_Controller_Varien_Front)。

因此,在我查看了Mage_Core_Controller_Varien_Router_Standard.

调试后Mage_Core_Controller_Varien_Router_Standard我明白了我的错。

  1. 我使用索引控制器而不是MyModuleContoller.

  2. Alan Storm 定义了不在管理模块下的控制器(即 adminhtml)。当我使用第一个配置时 - 它工作得很好,因为我在adminhtml部分下定义了新模块。在 Alan 的配置中,我无法将我的模块添加到 adminhtml。我可以覆盖它,但它不正确,因为 adminhtml 下的其他模块将被删除。

这是以下菜单的正确代码adminhtml

    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <mycompany_mymodule after="Mage_Adminhtml">Mycompany_Mymodule_Adminhtml</mycompany_mymodule >
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>

Incho 也在此处描述了此配置。

于 2012-08-26T01:56:42.387 回答