Laravel 4 обработка 404 ошибок

Я новичок в Laravel, и я пытаюсь поймать любые запросы, которые не соответствуют существующим маршрутам. В настоящее время я получаю ...

Symfony Component HttpKernel Exception NotFoundHttpException

Я создал App::missing() проводник в app/start/global.php Как рассказали на странице документации но это не поможет. Я также попытался создать App::error(function(NotFoundHttpException $exception, $code) обработчик, но это не помогло.

любая помощь будет оценили.

5 ответов


это, вероятно, связано с отладкой, включенной в . Попробуйте превратить это значение в false и посмотреть, если ваш пользовательский обработчик не обрабатывает" его.

кроме того, ваш обработчик ошибок должен вернуть ответ, чтобы "короткое замыкание" запроса и фактически ответить на результат вашего обработчика ошибок-вы возвращаете класс value / Response из своего App::error() обработчик? (Пожалуйста, покажите нам этот код).

вот статья о Laravel 4 Обработка Ошибок без очертаний процесса того, как Laravel использует App::missing() и App::error() обработчиков при возникновении ошибок.

обратите особое внимание на раздел "мясо класса обработчика" - он описывает, как вам нужно вернуть какое-то значение из обработчика, чтобы он не передавал исключение следующему обработчику (вероятно, ваш вывод ошибки Whoops, который отображается, когда debug установлено значение true на app/config/app.php).


вам нужно это: в ' app / start / global.php ' add:

App::missing(function($exception)
 {
     return Response::view('errorView', array(), 404);
 });

и, конечно, в представлениях создайте (в этом случае) errorView.лезвие.в PHP
EDIT: этот метод обрабатывает все ошибки" 404 Not Found".


вот как вызвать ошибку 404, когда возникает исключение ModelNotFoundException

App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $exception, $code)
{
    return Response::view('errors.404', array(), 404);
});

на

app - > config - > app.в PHP

Если вы

'debug' => true,

этой

'debug' => false,

вы получите среду пользовательского интерфейса, отличную от режима отладки. Пожалуйста, убедитесь, что вы проверили это.

спасибо :)


я смог заставить его работать, используя следующий код. Я позволяю 'debug' = > true, в моей локальной конфигурации.

в приложении / пуск / глобальный.в PHP

App::error(function(Symfony\Component\HttpKernel\Exception\NotFoundHttpException $exception)
{
    Log::error($exception);

    $response = Response::make(View::make('response')
        ->with('data', null)
        ->with('meta', 'Error, incorrect path')
        ->with('pagination', null));

    $response->setStatusCode(404);
    $response->header('content-type', 'application/json', true);

    return $response;
});

Если какой-либо интерес, содержание моего взгляда

<?php 

    echo json_encode(array(
    'data' => $data,
    'pagination' => $pagination, 
    'meta' => $meta), JSON_PRETTY_PRINT); 

?>

основной задачей было использовать Symfony\Component\HttpKernel\Exception\NotFoundHttpException в качестве типа исключения, а не только NotFoundHttpException.

С помощью NotFoundHttpException была вызвана ошибка 500.