4

我有一个名为 MenuItem 的驼峰控制器名称。而且我还为这个特定的控制器创建了一个路由器

    $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,
)
4

2 回答 2

1

这是因为 Windows 不区分大小写,而基于 Linux 的操作系统是。

从 ZendFramework 手册:

Zend_Controller 的调度程序然后获取控制器值并将其映射到一个类。默认情况下,它将控制器名称大写并附加单词 Controller。因此,在我们上面的示例中,控制器路线图映射到类 RoadmapController。

这意味着 MenuItemController.php 和 MenuitemController.php 是两个不同的东西,因此自动加载器无法找到匹配项。

通常,当使用多字控制器时,只需确保只有类的第一个字母和控制器中的 C 大写。

于 2011-10-12T11:04:09.353 回答
0

过去我有一个非常相似的问题(我也在 Windows 中开发并将应用程序部署到 Linux 服务器)。我的解决方案是重命名类和文件,删除大写。在您的情况下,它将是:

File Name: MenuitemController.php
Class Name: MenuitemController
于 2011-10-12T09:47:07.283 回答