2

Kohana 3.3 ですべてのエラーを処理するにはどうすればよいですか? 404/505 エラーではなく、php やその他の php のエラーによる「致命的なエラー」という意味ですか?

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;
    }

しかし、うまくいきません..ありがとう:)

4

2 に答える 2

6

「カスタム エラー ページは、throw HTTP_Exceptionの処理にのみ使用されます。たとえば、Respose::status()を介して単に 404 のステータスを設定した場合、カスタム ページは使用されません。」- リンクしたチュートリアル。

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;
    }
}
于 2013-10-01T12:11:24.580 に答える
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;
        }
    }
}
于 2014-09-17T16:50:45.870 に答える