Подтвердить что ты не робот

Показывать 404 страницы, если маршрут не найден в Laravel 5.1

Я пытаюсь понять, что 404 страницы не найдены, если маршрут не найден. Я следовал за многими учебниками, но это не сработало. У меня 404.blade.php в \laravel\resources\views\errors

Также в handler.php

public function render($request, Exception $e)
{
    if ($e instanceof TokenMismatchException) {
        // redirect to form an example of how i handle mine
        return redirect($request->fullUrl())->with(
            'csrf_error',
            "Opps! Seems you couldn't submit form for a longtime. Please try again"
        );
    }

    /*if ($e instanceof CustomException) {
        return response()->view('errors.404', [], 500);
    }*/

    if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException)
        return response(view('error.404'), 404);

    return parent::render($request, $e);
}

Если я ввожу неправильный URL-адрес в браузере, он возвращает пустую страницу. У меня

'debug' => env('APP_DEBUG', true),

в app.php.

Может ли кто-нибудь помочь мне показать 404 страницу, если маршрут не найден? Спасибо.

4b9b3361

Ответ 1

@tester. Ваша проблема уже решена, попробуйте выполнить команду ниже в композиторе:

php artisan view:clear

Затем попробуйте еще раз с неизвестным URL. Поскольку я также сталкивался с той же ошибкой раньше.

Ответ 2

Я получил 500 ошибок вместо 404 ошибок. Я решил проблему следующим образом:

В файле app/Exceptions/Handler.php существует функция render.

Заменить функцию этой функцией:

public function render($request, Exception $e)
{
    if ($this->isHttpException($e)) {
        switch ($e->getStatusCode()) {

            // not authorized
            case '403':
                return \Response::view('errors.403',array(),403);
                break;

            // not found
            case '404':
                return \Response::view('errors.404',array(),404);
                break;

            // internal error
            case '500':
                return \Response::view('errors.500',array(),500);
                break;

            default:
                return $this->renderHttpException($e);
                break;
        }
    } else {
        return parent::render($request, $e);
    }
}

Затем вы можете использовать представления, которые вы сохраняете в views/errors/404.blade.php, и т.д.

Ответ 3

введите описание изображения здесь > Метод прерывания немедленно вызовет исключение который будет обработан обработчиком исключений. При желании вы можете предоставить текст ответа:

abort(403, 'Unauthorized action.');

установлен ли ваш app_debug равным true? если это так, Laravel выдает ошибку с обратным трассировкой для целей отладки, если вы измените значение на false, Laravel покажет страницу 404 по умолчанию в папке с ошибками. При этом вы можете использовать прерывание в любое время. на уровне контроллера или на уровне маршрута, это полностью зависит от вас.

ie

Route::get('/page/not/found',function($closure){
  // second parameter is optional. 
  abort(404,'Page not found');
  abort(403); 
});

Ответ 4

Вам не нужно проверять тип ошибки и вручную отображать вид 404. Laravel уже знает, как сделать представление с кодом ошибки HTTP, который был выброшен (404 = resources/views/errors/404.blade.php). Избавьтесь от дополнительной проверки, и она должна работать нормально.

public function render($request, Exception $e)
{
    if ($e instanceof TokenMismatchException) {
        // redirect to form an example of how i handle mine
        return redirect($request->fullUrl())->with(
            'csrf_error',
            "Opps! Seems you couldn't submit form for a longtime. Please try again"
        );
    }

    return parent::render($request, $e);
}

Ответ 5

Я использую следующее в app/Exceptions/Handler.php(Laravel 5.2):

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $e
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $e)
{
    if ($e instanceof \ReflectionException OR $e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) //Si la ruta no existe, mostar view 404.
        return response(view('errors.404'), 404);
    return parent::render($request, $e);
}

И это выглядит так: img

Ответ 6

В apache вы можете поместить этот код в файл .htaccess в свой основной каталог и убедиться, что для него разрешено изменение директивы AllowOverride в файле httpd confg.

ErrorDocument 404 the\path\to\404.blade.php