我目前正在参与magento的学习和开发,我在前台工作,但现在我正试图让后端的东西工作,我面临着一个挑战。根据文档和谷歌的说法,这应该很简单,但我仍然得到了404。
我已经创建了一个标准的文件结构,如下所示:
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();
}
}
更改类的名称也没有任何效果,而且我真的不知道我做错了什么。我怎么才能让它正常工作呢?
发布于 2012-02-09 13:24:58
您有两个简单的问题需要解决:-)
首先:大写。对于区分大小写的文件系统,每个模块文件和目录(除了controllers
、etc/*
、data/*
和sql/*
)都必须大写。这样做的原因是直接实现和Varien_Autoload
根据类名查找类定义的方式的结合(尽管前者适用于操作控制器类)。这仅仅意味着您的模块应该是Csvengine而不是csvengine,并且您必须在文件名和模块声明节点modules/Mediafunction_Csvengine
中实现这一点。
其次:您的adminhtml控制器方法几乎是正确的。根据您的类名,您需要在controllers
下有一个名为Adminhtml
的文件夹。您还需要将admin/routers/adminhtml/args/modules/Mediafunction_csvengine
的值更新为Mediafunction_Csvengine
,因为它将与模块的代码池一起使用,以查找您的操作控制器目录。有关配置到目录的逻辑,请参阅Mage_Core_Controller_Varien_Router_Standard::collectRoutes()
。
编辑
我忘了指出你的路由(admin/csvengine/index)和你的控制器文件名的问题。在标准的路由到控制器映射中,Magento URL有五个区域:
http://site.com/thisisparttwo/thisispartthree/thisispartfour/foo/1/bar/2/
Base URL |front name |controller path|method | params...
您的控制器路径指向admin frontname下的CsvengineController类。您已经将控制器目录(包含我的更改)配置为Mediafunction/Csvengine/controllers/Adminhtml/
,因此在该目录中,您将需要一个包含名为Mediafunction_Csvengine_Adminhtml_CsvengineController
的类的CsvengineController.php
另一个注意事项通常是:Magento的admin ACL通过Mage_Adminhtml_Controller_Action::_isallowed()
方法工作--无需在控制器中重新实现此方法,所有管理员用户都可以不受限制地访问路由。
https://stackoverflow.com/questions/9211401
复制