0

これは私がこのエラーでしばらくの間ハッキングしてきた奇妙なことです。デプロイメントサーバーにのみ表示されるようです。私はholidaysという名前の完全に機能するコントローラーを持っています-コントローラーの構造とビューは次のとおりです。

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フレームワークベースのアプリケーションです。私のすべてのURLはこのように場違いになります。編集=======

奇妙なことに、ファイル名を保持しているもの、つまりHolidaysController.phpまたはholidaysController.phpに関係なく、オンラインでは/ Holidaysでしかアクセスできず、/ holidaysではアクセスできません。これはここで非常に深刻な問題であり、不足しています。それを解決する方法に関するアイデア:(

4

1 に答える 1

2

Linux では、Zend のクラス名は大文字と小文字が区別されます。

なんで?必要なクラス ファイルのみをロードし、Linux のファイル名は大文字と小文字を区別するためです。

大文字と小文字が区別されない Windows で開発している可能性があります。ファイル「holidaysController.php」を要求すると、windows は HolidaysController.php、holidayscontroller.php、または HoLiDaYsCoNtRoLlEr.php を返します。ファイルを検索し、そのファイルのみをロードします。

Linux (および Mac) では、これら 4 つのファイル名はすべて異なります。ドキュメントに従ってクラスに名前を付けたとしても(クラスには大文字、アクションにはキャメル)、同じケースでルーターを呼び出す必要があります。そうしないと、ファイルが見つからず、ロードされません。

混乱する理由: Zend は小文字に正規化しようとするため、最初に "holidayController.php" を検索します ("Holiday" と入力すると)。大文字と小文字が混在すると少し複雑になります。このページの黄色のボックスを参照してください。したがって、正規化されたものを見つけることができなかったため、大文字と小文字が混在していると見なされ、それが機能します。「holiday」と入力すると、ファイルが見つかりませんが、正規化またはキャメルケースされていないため、他のファイルを探す必要はありません。失敗するだけです。

オプション: そのファイルのルートとして "Holidays" のままにするか、ファイルの名前を "holidayController.php" に変更すると、Holiday または holiday で実行できます。(クラスは HolidayController のままにしておきます - そのビットは大文字と小文字を区別しません)。

于 2012-09-17T05:41:29.463 に答える