РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
673 of 1392 menu

NotFoundHttpException

Исключение NotFoundHttpException является частью HTTP-исключений Laravel и генерируется, когда входящий запрос не может быть сопоставлен ни с одним зарегистрированным маршрутом или когда ресурс не найден. Это стандартный способ обработки ошибок 404 в приложении. Исключение автоматически обрабатывается обработчиком исключений и возвращает ответ с HTTP-статусом 404.

Синтаксис

Исключение обычно не вызывается вручную, а генерируется автоматически маршрутизатором или при использовании метода findOrFail. Однако его можно выбросить вручную с помощью вспомогательной функции abort:

<?php abort(404, 'Custom error message'); ?>

Пример

Рассмотрим автоматическое возникновение исключения при обращении к несуществующему маршруту:

<?php use Illuminate\Support\Facades\Route; Route::get('/users', function () { return 'Users list'; }); // Запрос на /posts вызовет NotFoundHttpException ?>

При попытке перейти по адресу /posts, которого нет в маршрутах, Laravel автоматически выбрасывает исключение:

<!DOCTYPE html> <html> <head> <title>404 Not Found</title> </head> <body> <h1>404</h1> <p>Not Found</p> </body> </html>

Пример

Использование метода findOrFail для модели Eloquent при отсутствии записи:

<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Http\Request; class UserController extends Controller { public function show($id) { // Если пользователь с таким ID не найден, будет выброшено NotFoundHttpException $user = User::findOrFail($id); return response()->json($user); } } ?>

Результат при запросе несуществующего пользователя (например, ID = 999):

{ "message": "No query results for model [App\\Models\\User] 999", "exception": "NotFoundHttpException" }

Пример

Ручная генерация исключения с помощью вспомогательной функции abort в контроллере:

<?php namespace App\Http\Controllers; use App\Models\Post; use Illuminate\Http\Request; class PostController extends Controller { public function show($slug) { $post = Post::where('slug', $slug)->first(); if (!$post) { abort(404, 'Post not found'); } return view('posts.show', ['post' => $post]); } } ?>

Результат выполнения кода при отсутствии поста:

"Post not found"

Пример

Кастомизация страницы ошибки 404 в Laravel. Для этого создайте файл resources/views/errors/404.blade.php:

<!DOCTYPE html> <html> <head> <title>Страница не найдена</title> </head> <body> <h1>404 - Страница не найдена</h1> <p>Извините, запрашиваемая страница не существует.</p> <p>Вернитесь на <a href="{{ url('/') }}">главную</a>.</p> </body> </html>

Теперь при возникновении NotFoundHttpException будет отображаться кастомная страница.

Смотрите также

  • класс Handler,
    который обрабатывает все исключения в приложении
  • исключение HttpException,
    базовый класс для всех HTTP-исключений
  • исключение ModelNotFoundException,
    которое выбрасывается при отсутствии модели
  • метод render,
    который преобразует исключение в HTTP-ответ
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить