2012-08-29 109 views
0

我有一个ZF应用程序。在我的bootstrap.php中,我定义了我的应用程序的路线。 现在,当我在地址栏中键入一个不匹配任何路由的URL时,我收到一个致命错误。我不想那样,我只想显示'找不到页面'错误。 应用程序如何引发致命错误,而不是去我的错误控制器?如何在Zend Framework中显示自定义错误消息?

这是我的路线是这样的:

$router->addRoute('page1', 
     new Zend_Controller_Router_Route_Static('page1', array(
      'controller' => 'mycontroller', 
      'action' => 'index', 
      'id' => '2626' 
     )) 
    ); 

例如,如果我浏览到/ 2页我得到一个致命的错误,因为它关系到“myController的”不管怎么说,并试图做的东西我做的在那个控制器里。但我不想让它去那里。

在此先感谢您的答复。

+0

什么是错误信息? – Defense

+0

Zend根据内部发生的情况抛出HTTP状态码。如果它说错误500,它仍然是一个应用程序错误。然而。我已经为你的问题得到了答案! – Karma

回答

1

ErrorController应该是这样的。

class ErrorController extends Zend_Controller_Action { 

    public function errorAction() { 
    $errors = $this->_getParam('error_handler'); 

    if (!$errors || !$errors instanceof ArrayObject) { 
     $this->view->message = 'You have reached the error page'; 
     return; 
    } 

    switch ($errors->type) { 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: 
     // 404 error -- controller or action not found 
     $this->getResponse()->setHttpResponseCode(404); 
     $priority = Zend_Log::NOTICE; 
     $this->view->error_code = $this->getResponse()->getHttpResponseCode(); 
     $this->view->message = "Page Not Found"; 
     $this->renderScript('error/error_404.phtml'); 
     break; 
     default: 
     // application error 
     print_r($this->getResponse()); 
     $this->getResponse()->setHttpResponseCode(500); 
     $priority = Zend_Log::CRIT; 
     $this->view->error_code = $this->getResponse()->getHttpResponseCode(); 
     $this->view->message = 'Application error'; 
     if ($log = $this->getLog()) { 
     $log->log($this->view->message, $priority, $errors->exception); 
     $log->log('Request Parameters', $priority, $errors->request->getParams()); 
     $this->renderScript('error/error_500.phtml'); 
     } 

    // conditionally display exceptions 
     if ($this->getInvokeArg('displayExceptions') == true) { 
       $this->view->exception = $errors->exception; 
     } 

     $this->view->request = $errors->request; 
     $this->view->error_code = $this->getResponse()->getHttpResponseCode(); 
     $this->renderScript('error/error_500.phtml'); 
     break; 
    } 

    // Log exception, if logger available 
    if ($log = $this->getLog()) { 
     $log->log($this->view->message, $priority, $errors->exception); 
     $log->log('Request Parameters', $priority, $errors->request->getParams()); 
    } 

    // conditionally display exceptions 
    if ($this->getInvokeArg('displayExceptions') == true) { 
     $this->view->exception = $errors->exception; 
    } 

    $this->view->request = $errors->request; 
    } 

    public function getLog() { 
    $bootstrap = $this->getInvokeArg('bootstrap'); 
    if (!$bootstrap->hasResource('Log')) { 
     return false; 
    } 
    $log = $bootstrap->getResource('Log'); 
    return $log; 
    } 

} 

唷!您可以使用$this->getResponse()->HttpResponseCode()

还要定义任何HTTP Status响应代码,以达到最佳效果,我们(在引号),检查所需的日志。 !

有问题? :)

相关问题