Need assistance with Kohana 3 and catch all route turning into a 404 error

拜拜、爱过 提交于 2019-12-04 20:47:51
zerkms

For my projects I never specified any specific separated route for 404. I just catch exceptions thrown by routing, when no appropriate route was found.

Here is how I am handling all kind of exceptions that I've discovered in Kohana. I hope it will help you.

try
{
    try
    {
        $request = Request::instance();
        $request->execute();
    }
    catch (ReflectionException $e)
    {
        Kohana::$log->add(Kohana::ERROR_404, Kohana::exception_text($e));

        if (!IN_PRODUCTION)
        {
        throw $e;
        }

        $request->response = Request::factory('err/404')->execute();
    }
    catch (Exception404 $e)
    {
        Kohana::$log->add(Kohana::ERROR_404, Kohana::exception_text($e));

        if (!IN_PRODUCTION)
        {
        throw $e;
        }

        $request->response = Request::factory('err/404')->execute();
    }
    catch (Kohana_Request_Exception $e)
    {
        Kohana::$log->add(Kohana::ERROR_404, Kohana::exception_text($e));

        if (!IN_PRODUCTION)
        {
        throw $e;
        }

        header('Content-Type: text/html; charset='.Kohana::$charset, TRUE, 404);
        echo Request::factory('err/404')->send_headers()->execute()->response;
        exit;
    }
    catch (exception $e)
    {
        Kohana::$log->add(Kohana::ERROR, Kohana::exception_text($e));

        if (!IN_PRODUCTION)
        {
        throw $e;
        }

        $request->status = 500;
        $request->response = Request::factory('err/500')->execute();
    }
}
catch (exception $e)
{
        if (!IN_PRODUCTION)
        {
            throw $e;
        }
        echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        </head>
        <body>
        here is the message that everything is veeeery bad
        </body>
        </html>';
        exit;
}

Exception404:

class Kohana_Exception404 extends Kohana_Exception
{
    public function __construct($message = 'error 404', array $variables = NULL, $code = 0)
    {
        parent::__construct($message, $variables, $code);
    }
 }

Ah, I figured this one out.

This line...

$request->response = Request::factory(Route::get('default')->uri())->execute();

Was setting the response to the result of Route::get('default')->uri(). Looking at it further, I realised it will return an empty string, which will match the home route above. I feel silly....

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!