Ответ 1
@tester. Ваша проблема уже решена, попробуйте выполнить команду ниже в композиторе:
php artisan view:clear
Затем попробуйте еще раз с неизвестным URL. Поскольку я также сталкивался с той же ошибкой раньше.
Я пытаюсь понять, что 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 страницу, если маршрут не найден? Спасибо.
@tester. Ваша проблема уже решена, попробуйте выполнить команду ниже в композиторе:
php artisan view:clear
Затем попробуйте еще раз с неизвестным URL. Поскольку я также сталкивался с той же ошибкой раньше.
Я получил 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, и т.д.
> Метод прерывания немедленно вызовет исключение который будет обработан обработчиком исключений. При желании вы можете предоставить текст ответа:
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);
});
Вам не нужно проверять тип ошибки и вручную отображать вид 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);
}
Я использую следующее в 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
В apache вы можете поместить этот код в файл .htaccess в свой основной каталог и убедиться, что для него разрешено изменение директивы AllowOverride в файле httpd confg.
ErrorDocument 404 the\path\to\404.blade.php