Kohana_Request_Exception [0]: невозможно найти маршрут, соответствующий URI: - PullRequest
1 голос
/ 25 апреля 2011

У меня есть сайт Kohana, и я хочу запустить его в производство, но у меня есть проблема, которую я не знаю, как решить лучше всего: если кто-то обращается к несуществующему URI относительно моего сайта, появляется страница с сообщением заголовка:

Kohana_Request_Exception [0]: невозможно чтобы найти маршрут, соответствующий URI: (и URI здесь)

Интересно, могу ли я что-то сделать, чтобы перенаправить пользователя на стандартную страницу 404, когда он / она получает доступ к такому URI, могу ли я?

Большое спасибо!

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

Вы можете обрабатывать все ошибки так же, как описано в руководстве пользователя для исключений http:

http://kohanaframework.org/3.1/guide/kohana/errors#http-exception-handling

3 голосов
/ 25 апреля 2011

Вы можете обернуть $request->execute() в свой APPPATH/bootstrap.php блоком try / catch, а затем делать все, что захотите.

Моя выглядит так ...

try 
{
    // Attempt to execute the response
    $request->execute();
}
catch (Kohana_Request_Exception $e)
{
    if (Kohana::$environment === Kohana::DEVELOPMENT) throw $e;

    // Log the error
    Kohana::$log->add(Kohana::ERROR, Kohana::exception_text($e));

    // Create a 404 response
    $request->status = 404;
    $request->response = Request::factory('errors/404')->execute();

}
catch (Exception $e)
{
    if (Kohana::$environment === Kohana::DEVELOPMENT) throw $e;

    // Log the error
    Kohana::$log->add(Kohana::ERROR, Kohana::exception_text($e));
    // Create a 500 response
    $request->status = 500;

    $request->response = Request::factory('errors/500')->execute();
}

В идеале PHP должен поддерживать finally { ... }, и я мог бы вести там запись и, возможно, перебрасывать туда, но что вы можете сделать?

2 голосов
/ 29 апреля 2011

Попробуйте это

    define('IN_PRODUCTION', TRUE);
 // Instantiate your Request object
    $request = Request::instance();
    try
    {
        $request->execute();
    }
    catch (Exception $e) // if its not valid, it gets caught here
    {
        if (! IN_PRODUCTION) // if this is Development, its displays the error
        {
            throw $e;
        }
        // if its IN_PRODUCTION, it does the following:
        // Logs the error
        Kohana::$log->add(Kohana::ERROR, Kohana::exception_text($e));
        // Marks the status as 404
        $request->status = 404;
         $request->response = $request->factory('sitemap')->execute();
    }
    // then continues on with the request process to display your custom 404 page
    $request->send_headers()->response;
    echo $request->response;
...