2009-12-12 253 views
0

我發現一些與此問題密切相關的答案,但仍無法解決。 我相信人們說我的包含路徑有些不正確,但我嘗試了所有我無法找到的解決方案。致命錯誤:未找到'Zend_Controller_Action'類

這裏的錯誤:

Fatal error: Class 'Zend_Controller_Action' not found in /Users/*me*/Sites/*site*/application/controllers/IndexController.php on line 3 

這裏的包括語句:

$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的新手。這東西給了我一個皇室頭痛。我明確地將控制器添加到路徑中。我不知道我在忽略什麼。

btw,me網站是出於隱私原因的編輯名稱。

我對解決方案永遠感激不盡。

mjs-edit:

我注意到我的包括有點不吉利。因此,這裏是一個做了:

$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/" 

我注意到,在../library存在的Zend /控制器/動作。所以,我不明白爲什麼應用程序找不到它。

如果我從PHPDebug運行索引控制器,它返回

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 
+0

我一直現在我已經爲這個問題敲了兩天頭,我覺得我沒有接近解決方案。希望有人能提供比我現在更多的洞察力。 謝謝。 – 2009-12-15 02:28:35

回答

2

一個Zend_Appilcation自動加載器的默認行爲是採取類名

Zend_Controller_Action 

,並將其轉換成路徑

Zend/Controller/Action.php 

,然後嘗試包括/所需要的所需文件加載類。

所以,你可以有兩個不同的事情出錯

  1. 你的PHP包括路徑沒有指向默認Zend庫文件夾,並嘗試包括Zend/Controller/Action.php失敗了。

  2. 自動加載未正確註冊

因此,在你IndexController.php文件,添加以下全局命名空間區域類的聲明

var_dump(get_include_path()); 

這將輸出的包括以上路徑值。檢查包含路徑中的每個單獨路徑,並確保將Zend/Controller/Action.php附加到其中一個路徑解析爲Action.php文件。如果沒有,請採取措施確保有可能發生這種情況的路徑。

(以上假設你使用的是Zend_Application,這Zend的自己的應用程序框架,根據自己的Zend框架。如果您使用的組件單機可能會有進一步的併發症)

0

你包括路徑相對於應用程序的根,但該文件是在不同的級別(即,應用/控制器)被加載。所以,現在所有的包含路徑看起來像application/controllers /../庫是不正確的。

我會通過在我的包含路徑中使用絕對路徑來解決這個問題。例如,嘗試改變../library用戶/用戶 /網站/ 網站 /庫

+0

或者您可以使用'realpath(dirname(__ FILE __)。「/../ library」)'不要將自己綁定到特定主機。 – gnarf 2009-12-12 06:55:31

+0

我試過所有建議都沒有成功。包含路徑最初是在哪裏設置的?我問,因爲「../application/controllers:」是從「get_include_path()」檢索到的第一個條目。而PHP Debug報告說在那裏找不到zend_controller_action。也許在某個地方的ini文件中有什麼錯誤? – 2009-12-14 18:57:37