Php 若控制器为小写,则页面未找到错误,但若Zend Framework应用程序中的第一个字母为大写,则该错误有效

Php 若控制器为小写,则页面未找到错误,但若Zend Framework应用程序中的第一个字母为大写,则该错误有效,php,model-view-controller,zend-framework,Php,Model View Controller,Zend Framework,这很奇怪,我已经在这个错误上黑客攻击了一段时间。它似乎只显示在部署服务器上。我有一个名为holidays的完美工作控制器-以下是控制器和视图的结构: controllers -> HolidaysController.php <?php class HolidaysController extends App_Controller_Action { public function indexAction() { ..... } } ?> 当我导航到websit

这很奇怪,我已经在这个错误上黑客攻击了一段时间。它似乎只显示在部署服务器上。我有一个名为holidays的完美工作控制器-以下是控制器和视图的结构:

controllers
-> HolidaysController.php

<?php

class HolidaysController extends App_Controller_Action {

  public function indexAction() {
.....
  }
}

?>
当我导航到
website.com/holidays
时,会出现以下错误:

An error occurred
Page not found
Exception information:

Message: Action "index" does not exist and was not trapped in __call()
Stack trace:

#0 /home/bookitfa/bookings/library/Zend/Controller/Action.php(515): Zend_Controller_Action->__call('indexAction', Array)
#1 /home/bookitfa/bookings/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('indexAction')
#2 /home/bookitfa/bookings/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#3 /home/bookitfa/bookings/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#4 /home/bookitfa/bookings/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#5 /home/bookitfa/bookings/public/index.php(29): Zend_Application->run()
#6 {main}  

Request Parameters:

array (
  'controller' => 'holidays',
  'action' => 'index',
  'module' => 'default',
)  
但当我导航到
website.com/Holidays
时,它会因为一些奇怪的原因工作。除此之外,所有其他控制器都可以正常工作。似乎只有当控制器名称的第一个字母大写时,该控制器才能工作。为什么呢?这是一个基于zend框架的应用程序。我所有的URL都会像这样不合适。 编辑=======


奇怪的是,无论我将文件名(即HolidaysController.php或HolidaysController.php)保持在线状态,我只能在/Holidays之前访问它,而不能在/Holidays之前访问它,这是一个非常严重的问题,我已经没有办法解决它了:(

Zend中的类名区分大小写-在Linux上)

为什么?因为它只加载所需的类文件,Linux上的文件名区分大小写

您可能正在开发不区分大小写的Windows。当请求文件“holidaysController.php”时,Windows将返回holidaysController.php、holidaysController.php或holidaysController.php-您明白了!它查找文件,然后只加载该文件

在Linux(和Mac)上,这4个文件名都是不同的。即使您已经根据文档命名了类(大写代表类,驼峰代表操作),您也需要使用相同的大小写调用路由器,否则将找不到并加载文件

令人困惑的原因:Zend试图将其规范化为小写,因此它首先要查找“holidayController.php”(当您输入“Holiday”时)。混合情况使其变得有点复杂:请参见:上的黄色框,因此它找不到规范化的so,因此将其视为混合情况,然后再输入“Holiday”它找不到该文件,但由于该文件未被规范化或简化,它不需要查找任何其他文件。它只是失败了


您的选项:使用“Holiday”作为该文件的路由,或者将该文件重命名为“holidayController.php”,您可以使用Holiday或Holiday运行。(将类保留为holidayController-该部分不区分大小写).

什么是
App\u Controller\u Action
?它是否扩展了
Zend\u Controller\u Action
?是的,App\u Controller\u Action是一个扩展IDN不起作用:(这让我很紧张-还有其他想法吗?我重命名了该文件,但仍然不起作用你重命名为“holidayController.php”和/假日/失败?好的-其他有趣的事情正在发生。正如菲尔所建议的(加上你上次发布这个问题时所指出的)什么是App_Controller_Action?您已经将其定义为Zend_Controller_Action的扩展?是的-奇怪的是,这一切都在我的本地主机上工作,事实上,除了这一个之外,我的所有其他控制器都在工作。它们的名称都是一样的-我真的在这里迷路了:(你能发布所有的控制器文件(从开始到结束)在某个地方玩小提琴?否则我会被困在小写字母里。这没关系,但你确实重命名了文件,并且没有两个都上传了?很高兴这么长时间后你把它整理好了!
An error occurred
Page not found
Exception information:

Message: Action "index" does not exist and was not trapped in __call()
Stack trace:

#0 /home/bookitfa/bookings/library/Zend/Controller/Action.php(515): Zend_Controller_Action->__call('indexAction', Array)
#1 /home/bookitfa/bookings/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('indexAction')
#2 /home/bookitfa/bookings/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#3 /home/bookitfa/bookings/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#4 /home/bookitfa/bookings/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#5 /home/bookitfa/bookings/public/index.php(29): Zend_Application->run()
#6 {main}  

Request Parameters:

array (
  'controller' => 'holidays',
  'action' => 'index',
  'module' => 'default',
)