致命的な誤り:クラス「Zend_Controller_Action」が見つかりません
-
19-09-2019 - |
質問
この問題に密接に関連する答えをいくつか見つけましたが、まだ解決できません。私のインクルード パスに何かが間違っていると言っている人がいると思いますが、見つけられるすべての解決策を試しましたが無駄でした。
エラーは次のとおりです。
Fatal error: Class 'Zend_Controller_Action' not found in /Users/*me*/Sites/*site*/application/controllers/IndexController.php on line 3
include ステートメントは次のとおりです。
$newIncludePath = array();
$newIncludePath[] = '.';
$newIncludePath[] = 'include';
$newIncludePath[] = get_include_path();
$newIncludePath[] = '../library';
$newIncludePath[] = '../application/classes/';
$newIncludePath[] = '../application/models/';
$newIncludePath[] = '../application/models/';
$newIncludePath[] = '../application/controllers';
$newIncludePath = implode(PATH_SEPARATOR, $newIncludePath);
set_include_path($newIncludePath);
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
私は何時間もキーボードに頭をぶつけてフォーラムを調べてきました。私は zend と php を初めて使用します。このことは私にひどい頭痛を引き起こしました。コントローラーをパスに明示的に追加しました。何を見逃しているのか分かりません。
ところで、 自分 そして サイト プライバシー上の理由から名前は編集されています。
解決策にいつも感謝しています。
mjs-編集:
インクルードが少し不安定であることに気づきました。そこで、次のようにやり直します。
$newIncludePath = array();
$newIncludePath[] = '.';
$newIncludePath[] = get_include_path();
$newIncludePath[] = '../library';
$newIncludePath[] = '../application/classes/';
$newIncludePath[] = '../application/models/';
$newIncludePath[] = '../application/library/';
$newIncludePath = implode(PATH_SEPARATOR, $newIncludePath);
set_include_path($newIncludePath);
var_dump の出力:
string(148) "../application/controllers:.:.:/Applications/MAMP/bin/php5/lib/php:../library:../application/classes/:../application/models/:../application/library/"
Zend/Controller/Action が ../library の下に存在することに気付きました。したがって、アプリがなぜそれを見つけられないのかわかりません。
PHPDebug から IndexController を実行すると、次の結果が返されます。
string(170) ".:/Users/me/Sites/site:/Applications/Zend/Zend Studio - 7.1.0/plugins/org.zend.php.framework.resource_7.1.0.v20091101-1523/resources/ZendFramework-1/library/"
Fatal error: Class 'Zend_Controller_Action' not found in /Users/me/Sites/site/application/controllers/IndexController.php on line 5
解決
Zend_Appilcation オートローダーのデフォルトの動作では、クラス名を取得します。
Zend_Controller_Action
それをパスに変換します
Zend/Controller/Action.php
次に、クラスをロードするために必要なファイルをインクルード/要求します。
したがって、2つの異なる問題が発生する可能性があります
PHP インクルード パスがデフォルトの Zend ライブラリ フォルダーを指していないため、インクルードしようとしています
Zend/Controller/Action.php
失敗しています。オートローダーが正しく登録されていません
それで、あなたの中で IndexController.php
ファイルのクラス宣言の上のグローバル名前空間領域に次の行を追加します。
var_dump(get_include_path());
これにより、インクルード パスの値が出力されます。インクルード パス内の個々のパスを確認し、追加が行われていることを確認します。 Zend/Controller/Action.php
そのうちの 1 つは Action.php ファイルに解決されます。そうでない場合は、これを可能にするパスが存在することを確認するための手順を実行します。
(上記は Zend_Application を使用していることを前提としています。これは、独自の Zend フレームワークに基づいた Zend 独自のアプリケーション フレームワークです。コンポーネントをスタンドアロンで使用している場合は、さらに複雑になる可能性があります)
他のヒント
あなたはパスを含めるアプリケーションのルートを基準にしていますが、ファイルは異なるレベル(すなわち。アプリケーション/コントローラ)でロードされています。だから、すべてのパスが間違っている今/../ライブラリアプリケーション/コントローラのように見えます。
私は私の道を含んで絶対パスを使用することによってこの問題を解決するでしょう。たとえば、ユーザーに../library変更してみてください/ の私の/サイト/ のサイトの/ライブラリ