我有一个名为MenuItem的camelcased控制器名称。此外,我还为此特定控制器创建了一个路由器
$routeMenuItem = new Zend_Controller_Router_Route('/menu-item/:action/:menu/:parent/:id/*', array(
'controller' => 'MenuItem',
'action' => 'index',
'menu' => 1,
'parent' => 0,
'id' => 0
));
不,当我导航到此路线时,请说/menu-item/index/2
我收到错误,Invalid controller specified (MenuItem)
错误。
但是,我在在linux环境下部署时遇到了这个问题。但是,在Windows环境中进行开发时,可以正常工作。
如何解决这个问题?
控制器:
File Name: MenuItemController.php
Class Name: MenuItemController
堆栈跟踪
#0 /../library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 /../library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#2 /../library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#3 /../public/index.php(25): Zend_Application->run()
#4 {main}
请求参数
array (
'action' => 'index',
'menu' => '2',
'controller' => 'MenuItem',
'parent' => 0,
'id' => 0,
)
答案 0 :(得分:1)
这是因为Windows不区分大小写并且基于Linux的操作系统是。
来自ZendFramework手册:
Zend_Controller的调度程序然后获取控制器值并映射 它上课了。默认情况下,它标题 - 控制器名称和 附加控制器一词。因此,在我们上面的例子中, 控制器路线图映射到类RoadmapController。
这意味着MenuItemController.php和MenuitemController.php是两个不同的东西,因此自动加载器无法找到匹配项。
通常,在使用多字控制器时,只需确保只有类的第一个字母和控制器中的C大写。
答案 1 :(得分:0)
我过去遇到了一个非常类似的问题(我也在Windows中开发并将应用程序部署到Linux服务器)。我的解决方案是重命名类和文件,以删除大写。在你的情况下,它将是:
File Name: MenuitemController.php
Class Name: MenuitemController