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

Функция report_if

Функция report_if применяется для логирования исключений только в том случае, если переданное условие истинно. Она принимает три параметра: условие, исключение и необязательный строковый контекст. Если условие выполняется, исключение отправляется в лог-канал через стандартный механизм отчётов Laravel. Функция не прерывает выполнение программы, в отличие от throw_if.

Синтаксис

<?php report_if($condition, $exception, $context); ?>

Пример

Давайте выполним логирование ошибки только в том случае, если значение переменной больше 10:

<?php namespace AppHttpControllers; use IlluminateHttpRequest; use AppModelsArticle; use Exception; class ArticleController extends Controller { public function show($id) { $article = Article::find($id); if ($article === null) { $value = 15; $exception = new Exception('Article not found'); report_if($value > 10, $exception, 'Article search error'); return response()->json(['message' => 'Article not found'], 404); } return response()->json($article); } } ?>

В этом примере, поскольку 15 больше 10, исключение будет записано в лог с контекстом 'Article search error'. При этом пользователь получит ответ с кодом 404, а не ошибку на странице.

Пример

Давайте залогируем исключение только для определённого типа ошибок, используя проверку на экземпляр класса:

<?php namespace AppHttpControllers; use AppModelsUser; use IlluminateDatabaseEloquentModelNotFoundException; use Exception; class UserController extends Controller { public function update($id) { try { $user = User::findOrFail($id); $user->update(request()->all()); return response()->json($user); } catch (Exception $e) { $isNotFound = $e instanceof ModelNotFoundException; $context = 'User update failed'; report_if($isNotFound, $e, $context); return response()->json(['error' => 'User not found'], 404); } } } ?>

В данном случае исключение будет записано в лог только если оно является экземпляром ModelNotFoundException. Другие типы ошибок будут проигнорированы функцией.

Пример

Давайте используем функцию report_if без контекста для логирования ошибок на основе пользовательских данных:

<?php namespace AppHttpControllers; use AppModelsProduct; use Exception; class ProductController extends Controller { public function delete($id) { $product = Product::find($id); if ($product === null) { $exception = new Exception('Product deletion failed'); $isAdmin = auth()->user()->role === 'admin'; report_if($isAdmin, $exception); return response()->json(['message' => 'Product not found'], 404); } $product->delete(); return response()->json(['message' => 'Product deleted']); } } ?>

Здесь исключение будет записано в лог только в том случае, если пользователь является администратором. Обычные пользователи не увидят эту ошибку в логах.

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

"Exception logged with level error"

Результат выполнения кода для обычного пользователя:

"Exception not logged"

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

  • функция report,
    которая безусловно отправляет исключение в лог
  • функция throw_if,
    которая выбрасывает исключение при выполнении условия
  • метод error,
    который записывает сообщение уровня error в лог
  • функция logger,
    которая возвращает экземпляр логгера
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить