2010-11-27 107 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 
相关问题