2010-11-27 110 views
1

在運行Xampp 1.7.1軟件包的Windows機器上使用Zend Framework v1.11.0。我的項目目錄結構如下。使用Zend框架時未捕獲異常'Zend_Controller_Dispatcher_Exception'錯誤

/ 
|- /data 
| |- /logs 
| |- /uploaded-files 
| |- /tmp 
|- /htdocs 
|- /include 
| |- /Controllers 
| |- /Zend 
|- /templates 

我在我的index.php位於htdocs目錄下面的代碼:

<?php 

    require_once('Zend/Loader.php'); 
    Zend_Loader::registerAutoload(); 

    $controller = Zend_Controller_Front::getInstance(); 
    $controller->setControllerDirectory('../include/Controllers'); 
    $controller->dispatch(); 

?> 

我得到的錯誤如下:

聲明:那麼Zend_Loader ::那麼Zend_Loader :: registerAutoload從1.8.0開始被棄用,並且將被2.0.0刪除;用C使用Zend_Loader_Autoloader代替:\ XAMPP \ htdocs中\ myproject的\包括在線路\ Zend的\ Loader.php 266

致命錯誤:未捕獲的異常 'Zend_Controller_Dispatcher_Exception' 在C消息 '指定的(錯誤)無效控制器': \ XAMPP \ htdocs中\ myproject的\包括\ Zend的\控制器\分派器\ Standard.php:248堆棧跟蹤:

#0 C:\ XAMPP \ htdocs中\ myproject的\包括\ Zend的\控制器\ Front.php( 954):Zend_Controller_Dispatcher_Standard-> dispatch(Object(Zend_Controller_Request_Http),Object(Zend_Controller_Response_Http))

#1 C:\ XAMPP \ htdocs中\ myproject的\ htdocs中\的index.php(8):Zend_Controller_Front->調度()

#2 {主}扔在C:\ XAMPP \ htdocs中\的myproject \包括\ Zend的\控制器\調度\ Standard.php線位於myproject的/ htdocs中248

我的.htaccess文件:

RewriteEngine on 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 

在我的Apache的httpd.conf我有虛擬主機定義如下:

<VirtualHost myproject:80> 
    ServerName myproject 
    DocumentRoot "c:/xampp/htdocs/myproject/htdocs" 
    <Directory "c:/xampp/htdocs/myproject/htdocs"> 
     AllowOverride None 
     Options All 
    </Directory> 
    php_value include_path ".;c:/xampp/htdocs/myproject/include;c:/xampp/php/PEAR" 
    php_value magic_quotes_gpc off 
    php_value register_globals off 
</VirtualHost> 

這裏可能會出現什麼問題?

請幫助 謝謝

+0

你爲什麼不使用自帶與Zend工具的常規index.php文件 – tawfekov 2010-11-27 19:29:32

回答

1

首先的;

Zend_Loader::registerAutoload(); 

已被棄用,這就是你得到的第一個通知

Notice: Zend_Loader::Zend_Loader::registerAutoload is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead in C:\xampp\htdocs\myproject\include\Zend\Loader.php on line 266 

你的情況你的應用程序不知道什麼是默認的控制器名稱,其默認的交流重刑 它拋出一個錯誤 和錯誤處理程序佔據了它的位置,並且您的前端控制器再次嘗試找到錯誤控制器,並且它找不到它 因此它向您顯示此錯誤

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in C:\xampp\htdocs\myproject\include\Zend\Controller\Dispatcher\Standard.php:248 Stack trace: 

還好最後: 如何解決,如果我將負責:

1-重新疥癬的應用程序結構要像默認ZF文件結構 2 - 你可以嘗試設置默認的控制器名稱和動作名稱,請查閱文檔或 導航到的Zend /控制器/ Front.php ,你會發現的功能,如

public function setDefaultAction($action) 
    { 
     $dispatcher = $this->getDispatcher(); 
     $dispatcher->setDefaultAction($action); 
     return $this; 
    } 

public function setDefaultAction($action) 
    { 
     $dispatcher = $this->getDispatcher(); 
     $dispatcher->setDefaultAction($action); 
     return $this; 
    } 

等諸多功能setter方法

也不要forg等深吸看看@ ZF flowchart http://devzone.zend.com/article/4601

我希望幫助您

0

消息無效的控制器所指定的(錯誤),意味着調度員正在尋找一個名爲ErrorController控制器類,但無法找到它。

當Zend_Controller_Front中的throwExceptions標誌設置爲false時,通常會調用ErrorController。在這種情況下,拋出的異常將被彙總並轉發給ErrorController類。這是由ErrorHandler插件提供的一項功能:名爲Zend_Controller_Plugin_ErrorHandler的類。

簡而言之,在您的代碼中可能存在拋出異常的東西,但由於您沒有錯誤控制器,調度程序將失敗。更改前端控制器中的throwExceptions標誌,創建錯誤控制器或禁用該插件應允許您查看實際錯誤來自何處。

0

我知道這已經太晚了,對於像我這樣遇到這個錯誤的其他人來說,這可能是有用的。

對於第一個錯誤:替換此代碼。

require_once('Zend/Loader.php'); 
Zend_Loader::registerAutoload(); 

與這一個

require_once 'Zend/Loader/Autoloader.php'; 
$autoloader = Zend_Loader_Autoloader::getInstance(); 
$autoloader->setFallbackAutoloader(true); 

,改變你的目錄結構了一下,用下面的代碼 使文件IndexController.phpindex文件夾

$controller = Zend_Controller_Front::getInstance(); 
$controller->setDefaultModule('index'); 
$controller->addModuleDirectory('PATH_TO_MODULES')->dispatch(); 

而不是使用此

$controller = Zend_Controller_Front::getInstance(); 
$controller->setControllerDirectory('../include/Controllers'); 
$controller->dispatch(); 

您的導向器結構是這樣的

application 
    modules 
     index 
      controllers 
       IndexController.php 
      views 
相關問題