2012-01-10 3 views
3

привет всем его моим первым приложением, использующим Zend Framework, я следил за tutorial, это было очень красиво и просто после окончания, я получил следующую ошибку .anyone, пожалуйста, скажите мне, почему я получаю это?Ошибка в моем первом приложении zend

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

Stack trace: 
#0 C:\xampp\htdocs\zend_login\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#1 C:\xampp\htdocs\zend_login\library\Zend\Controller\Front.php(212): Zend_Controller_Front->dispatch() 
#2 C:\xampp\htdocs\zend_login\web_root\index.php(9): Zend_Controller_Front::run('/application/co...') 
#3 {main} 

Next exception 'Zend_Controller_Exception' with message 'Invalid controller specified (error) 
#0 C:\xampp\htdocs\zend_login\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#1 C:\xampp\htdocs\zend_login\library\Zend\Controller\Front.php(212): Zend_Controller_Front->dispatch() 
#2 C:\xampp\htdocs\ in C:\xampp\htdocs\zend_login\library\Zend\Controller\Plugin\Broker.php on line 336 

это мой index.php в папке web_root

<?php 
error_reporting(E_ALL|E_STRICT); 
ini_set('display_errors', true); 
date_default_timezone_set('Europe/London'); 
$rootDir = dirname(dirname(__FILE__)); 
set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path()); 
$rootDir . '/library' . PATH_SEPARATOR . get_include_path(); 
require_once 'Zend/Controller/Front.php'; 
Zend_Controller_Front::run('/application/controllers'); 
?> 
+2

Кажется, нет контроллера с именем «ошибка». Есть ли файл ErrorController.php в вашем каталоге контроллеров для обработки ошибок приложения? –

+0

no i dont have ErrorController.php в каталоге контроллеров У меня только есть IndexController.php в каталоге контроллеров –

+0

Я просто добавляю ErrorController.php в каталог контроллеров по-прежнему ту же ошибку @ Hikaru-Shindo –

ответ

3

Вы настроили обработчик ошибок Zend, но нет контроллера обработчика ошибок. За этим должна стоять ваша настоящая проблема.

Создайте файл ErrorController.php внутри вашего каталога контроллеров со следующим содержимым:

class ErrorController extends Zend_Controller_Action 
{ 
    /** 
    * Handles system errors and 404s 
    */ 
    public function errorAction() 
    { 
     $errors = $this->_getParam('error_handler'); 

     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->message = 'Page not found'; 
       break; 
      default: 
       // application error 
       $this->getResponse()->setHttpResponseCode(500); 
       $priority = Zend_Log::CRIT; 
       $this->view->message = 'Application error'; 
       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; 
    } 

    /** 
    * Get the log 
    * 
    * @return Zend_Log|false 
    */ 
    public function getLog() 
    { 
     $bootstrap = $this->getInvokeArg('bootstrap'); 
     if (!$bootstrap->hasResource('Log')) { 
      return false; 
     } 
     $log = $bootstrap->getResource('Log'); 
     return $log; 
    } 
} 

И соответствующий вид вид/ошибка/error.phtml:

<h2><?php echo $this->message ?></h2> 

<?php if (isset($this->exception)): ?> 

<h3>Exception information:</h3> 
<p> 
    <b>Message:</b> <?php echo $this->exception->getMessage() ?> 
</p> 

<h3>Stack trace:</h3> 
<pre><?php echo $this->exception->getTraceAsString() ?></pre> 

<h3>Request Parameters:</h3> 
<pre><?php echo $this->escape(var_export($this->request->getParams(), true)) ?></pre> 

Это более или меньше по умолчанию создаются сценарии Zend Framework при создании нового проекта (они немного изменены, так как у меня нет чистой версии на данный момент и нет времени для создания нового проекта. Но это должно работать.)

Здесь вы можете узнать больше о обработчике ошибок: http://framework.zend.com/manual/en/zend.controller.plugins.html#zend.controller.plugins.standard.errorhandler

+1

thanQ очень для вас время я сделал это, но реальная проблема была на странице индекса, мой путь не был прав, хотя код ура сделает мою ошибку красивым способом i включил его thanx –

Смежные вопросы