我目前正在参与学习和开发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();
}
}
更改类的名称也没有任何效果,我真的对我做错了什么一无所知。我怎样才能使这个工作?
答案 0 :(得分:6)
您需要解决两个简单问题: - )
第一:资本化。对于区分大小写的文件系统,每个模块文件和目录(controllers
,etc/*
,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
方法工作 - 无需在控制器中重新实现,所有管理员用户都可以不受限制地访问路径。