Функция abort_if
Функция abort_if применяется для досрочного прекращения обработки HTTP-запроса
в случае, если переданное условие истинно. Первым параметром передаётся условие,
вторым - HTTP-статус ответа, третьим - сообщение об ошибке, четвёртым -
массив заголовков. Если условие ложно, выполнение кода продолжается.
Синтаксис
<?php
abort_if($condition, $status, $message, $headers);
?>
Пример
Давайте прервём выполнение запроса, если идентификатор пользователя меньше 1:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
public function show($id)
{
abort_if($id < 1, 400, 'Invalid user ID');
return "User ID: " . $id;
}
}
?>
Результат выполнения кода при запросе /user/1:
"User ID: 1"
Результат выполнения кода при запросе /user/0:
"HTTP 400 Bad Request"
Пример
Давайте прервём выполнение запроса с выводом кастомного сообщения, если статья не найдена:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function show($id)
{
$article = Article::find($id);
abort_if($article === null, 404, 'Article not found');
return $article->title;
}
}
?>
Результат выполнения кода, если статья существует:
"Article title"
Результат выполнения кода, если статьи нет:
"HTTP 404 Not Found"
Пример
Давайте прервём выполнение запроса с дополнительными заголовками, если пользователь не является администратором:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class AdminController extends Controller
{
public function index(Request $request)
{
$isAdmin = $request->user()->role === 'admin';
abort_if(
!$isAdmin,
403,
'Access denied',
['X-Reason' => 'Insufficient permissions']
);
return 'Admin panel';
}
}
?>
Результат выполнения кода для обычного пользователя:
"HTTP 403 Forbidden"
Результат выполнения кода для администратора:
"Admin panel"
Пример
Давайте используем abort_if в маршруте для проверки
параметра запроса:
<?php
use IlluminateSupportFacadesRoute;
Route::get('/search', function () {
$query = request('q');
abort_if(empty($query), 422, 'Search query is required');
return 'Searching for: ' . $query;
});
?>
Результат выполнения кода при запросе /search?q=abc:
"Searching for: abc"
Результат выполнения кода при запросе /search:
"HTTP 422 Unprocessable Content"
Смотрите также
-
функция
abort,
которая всегда прерывает выполнение запроса -
функция
abort_unless,
которая прерывает выполнение запроса, если условие ложно -
функция
response,
которая создаёт HTTP-ответ -
функция
redirect,
которая выполняет перенаправление