这很奇怪我在这个错误中已经被黑客攻击了一段时间。它似乎只出现在部署服务器上。我有一个名为holiday的完美工作控制器 - 这是控制器和视图的结构:
controllers
-> HolidaysController.php
<?php
class HolidaysController extends App_Controller_Action {
public function indexAction() {
.....
}
}
?>
我的观看文件位于
views/scripts/holidays/index.phtml
当我导航到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框架的应用程序。我的所有网址都不合适。
编辑=======
奇怪的是,不管我保留了什么文件名,即HolidaysController.php或holidaysController.php - 在线我只能通过/假期访问它而不是/假期,这是一个非常严重的问题我在这里没有关于如何解决它的想法:(
答案 0 :(得分:2)
Zend中的类名称区分大小写 - 在Linux上。
为什么呢?因为它只加载它需要的类文件,Linux上的文件名区分大小写。
你可能正在开发Windows,它不区分大小写。当询问文件“holidaysController.php”时,windows将返回HolidaysController.php,holidayscontroller.php或HoLiDaYsCoNtRoLlEr.php - 你明白了!它查找文件,然后只加载该文件。
在Linux(和Mac)上,这4个文件名都不同。即使您已根据文档命名该类(类的大写,操作的驼峰),您还需要使用相同的大小写调用路由器 - 否则将无法找到并加载该文件。
为什么会让人感到困惑:Zend试图小写以小写,因此它首先寻找“holidayController.php”(当你输入“Holiday”时)。混合的情况有点复杂:看this page上的黄色框:所以它找不到normlaised所以处理为混合情况,然后工作。当您输入“假日”时,它无法找到该文件,但由于它没有被标准化或来自它,它不需要寻找任何其他文件。它失败了。
您的选择:将“假期”作为该文件的路径,或将文件重命名为“holidayController.php”,您可以使用假日或假日运行。 (将该类保留为HolidayController - 该位不区分大小写。)