0

这很奇怪,我已经为这个错误破解了一段时间。它似乎只显示在部署服务器上。我有一个完美工作的控制器,名为 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 或 holidayController.php - 在线我只能通过 /Holidays 而不是 /holidays 访问它,这是一个非常严重的问题,我已经用完了关于如何解决它的想法:(

4

1 回答 1

2

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

为什么?因为它只加载它需要的类文件,而且Linux上的文件名是区分大小写的。

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

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

为什么会让人困惑:Zend 尝试将其规范化为小写,因此它首先查找“holidayController.php”(当您输入“Holiday”时)。混合大小写有点复杂:请参阅此页面上的黄色框:因此它未能找到规范化的,因此将其视为混合大小写,然后可以工作。当您输入“holiday”时,它无法找到该文件,但由于它没有被规范化或驼峰式,它不需要寻找任何其他文件。它只是失败了。

Your options: stay with "Holidays" as the route for that file, or rename the file as "holidayController.php" and you can run with Holiday or holiday. (Leave the class as HolidayController - that bit is not case sensitive).

于 2012-09-17T05:41:29.463 回答