Fatal error: Cannot redeclare class Zend_Controller_Action in D:\AppServ\php5\include\Zend\Controller\Action.php on line 43zend framework 框架,无论是控制器错误, 还有其它的调用错误等等 都会提示这个错误, 这非常的让人难排查问题. ~~~ 请问有什么方式更好的各精细地捕捉显示zf 的错误吗?比如我传个错误的数据库密码过去, 我希望是看到提示数据库连接失败, 而不是  Cannot redeclare class Zend_Controller_Action  ...  这个提示让人排查起来太头痛了.
class ErrorController extends Zend_Controller_Action
{
    public function errorAction()
    {
     //$errors = $this->_getParam('error_handler');
     //print_r($errors);
     $errors = $this->_getParam('error_handler');
        
     $exception = $errors->exception;
        echo $exception->getMessage() ;
        echo $exception->getTraceAsString();   ... ...error控制器并不能捕捉错误?

解决方案 »

  1.   

    他是说 Zend_Controller_Action 被重复定义了
      

  2.   

        事实上是action方法中有个地方写得不合理才会这样提示, 我是想希望看到哪个地方不合理. ...zf好像动不动有错就直接提示 Cannot redeclare class Zend_Controller_Action , 太笼统了.. 
      

  3.   

    我没碰到过这种问题,你是不是写了一个类叫Zend_Controller_Action啊?
      

  4.   

    如果你的application.ini里有这行,那么把它注释掉
    includePaths.library = APPLICATION_PATH "/../library"
      

  5.   

    数据库密码或者sql语法这种错误,需要你自己try-catch。
    你可以extends他的excaption类,来写一个新的方法进去进行异常捕获。他不会自动捕获这种异常。它只会捕获他的控制器是否报错这种异常,具体的你可以去看下他的源代码。它的library里面,每个类其实都对应一个excaption.php的文件和一个类,但都只是从抽象类继承下来,而没有写任何东西,你可以为你的每个controller都写一个excaption.php的类,都继承自controller目录下的excaption.php。
      

  6.   

    注意,异常主要是为了捕获逻辑错误,而不是语法错误,你想要的是php本身的错误报告。让zf打开php本身的错误报告。在ini或xml配置文件里写入这两行。
    然后在初始化Zend_Application对象的时候他就会自动加载,以后遇到语法错误就会显示了。phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
      

  7.   

    谢谢大家, zf框架对它比较熟悉了, 之前几天刚接触时主要是看了不对应框架版本的不同文档,所以搞来搞去绕了不少弯路~~~. 最后在zend网站找到 快速入门 里面找到对应版本的文档来得就ok~ 还支持中文.
    $errors = $this->_getParam('error_handler');
            //print_r($errors->type);
           // echo $errors->exception;
            echo "<pre>";
             print_r($errors);        echo "<pre>";