2013-10-01 4 views
2

Как я могу обрабатывать каждую ошибку в Kohana 3.3? Я имею в виду ошибку 404/505, но «Fatal Error» из php и других ошибок php?Как я могу обрабатывать все ошибки в Kohana 3.3

Я смотрел на http://kohanaframework.org/3.3/guide/kohana/tutorials/error-pages, и я делаю это, но он обрабатывает только ошибки 404/505 (и другие). Я не могу обработать 500 ошибок.

создать файл /APP/Classes/HTTP/Exception/500.php

class HTTP_Exception_500 extends Kohana_HTTP_Exception_500 { 

    public function get_response() 
    { 
     $session = Session::instance(); 
     $view = View::factory('index'); 
      $view->content = View::factory('errors/505'); 
     $view->title = 'Wewnętrzny błąd'; 
     // Remembering that `$this` is an instance of HTTP_Exception_404 
      $view->content->message = 'Wystąpił wewnętrzny błąd. Szczegóły zostały  przekazane do administracji, naprawimy to!'; 

     $response = Response::factory() 
      ->status($this->getCode()) 
      ->body($view->render()); 

     return $response; 
    } 

Но dosn't работа .. спасибо :) страниц

ответ

6

«Персонализированные сообщения об ошибках будут только используется для обработки throw HTTP_Exception. Если вы просто установите статус, например, 404 через Respose::status(), пользовательская страница не будет использоваться. " - Учебник, с которым вы связались.

Код, который вызывает HTTP_Exception::get_response(), находится в Request_Client_Internal::request_execute().

Для обработки других исключений вам необходимо перезаписать Kohana_Exception::response(). Что-то вроде этого должно работать.

<?php defined('SYSPATH') OR die('No direct script access.'); 

class Kohana_Exception extends Kohana_Kohana_Exception { 

    /** 
    * Generate a Response for all Exceptions without a more specific override 
    * 
    * The user should see a nice error page, however, if we are in development 
    * mode we should show the normal Kohana error page. 
    * 
    * @return Response 
    */ 
    public static function response(Exception $e) 
    { 
     if (Kohana::$environment >= Kohana::DEVELOPMENT) 
     { 
      // Show the normal Kohana error page. 
      return parent::response(); 
     } 

     $view = View::factory('index'); 
     $view->content = View::factory('errors/500'); 
     $view->title = 'Wewnętrzny błąd'; 
     $view->content->message = 'Wystąpił wewnętrzny błąd. Szczegóły zostały przekazane do administracji, naprawimy to!'; 

     $response = Response::factory() 
      ->status(500) 
      ->body($view->render()); 

     return $response; 
    } 
} 
0

Вы могли бы просто написать этот фрагмент в bootstrap.php

if (Kohana::$environment == Kohana::PRODUCTION) 
{ 
    Kohana_Exception::$error_view = 'template/errors'; 
} 

И вы можете иметь различный вид для HTTP_Exceptions

<?php defined ('SYSPATH') or die ('No direct script access.'); 

class HTTP_Exception extends Kohana_HTTP_Exception { 

    /** 
    * Generate a Response for all Exceptions without a more specific override 
    * 
    * The user should see a nice error page, however, if we are in development 
    * mode we should show the normal Kohana error page. 
    * 
    * @return Response 
    */ 
    public function get_response() 
    { 
     // Lets log the Exception, Just in case it's important! 
     Kohana_Exception::log($this); 

     if (Kohana::$environment >= Kohana::DEVELOPMENT) 
     { 
      // Show the normal Kohana error page. 
      return parent::get_response(); 
     } 
     else 
     { 
      // Generate a nicer looking "Oops" page. 
      $view = View::factory('template/http_errors'); 

      $response = Response::factory() 
       ->status($this->getCode()) 
       ->body($view->render()); 

      return $response; 
     } 
    } 
} 
Смежные вопросы