Класс Request
Класс Request является основным инструментом для получения данных
от клиента в Laravel. Он инкапсулирует всю информацию о HTTP-запросе,
включая метод, URI, параметры, заголовки, загруженные файлы и куки.
Доступ к объекту запроса можно получить через фасад Request,
внедрение зависимости в контроллеры или глобальную функцию request.
Объект запроса содержит все входные данные, включая параметры строки
запроса, тело POST-запроса и JSON-данные, объединяя их в единый массив.
Класс предоставляет множество методов для проверки наличия данных,
их извлечения и валидации.
Синтаксис
Базовый синтаксис получения объекта запроса в контроллере:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function store(Request $request)
{
//
}
}
?>
Получение всех данных запроса
Метод all возвращает все данные из запроса в виде ассоциативного массива:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function store(Request $request)
{
$res = $request->all();
echo $res['title'];
echo $res['content'];
}
}
?>
Получение конкретного поля
Метод input получает значение поля по имени с возможностью указать значение по умолчанию:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function store(Request $request)
{
$title = $request->input('title');
$status = $request->input('status', 'draft');
echo $title;
echo $status;
}
}
?>
Результат выполнения кода при запросе с параметрами title=article и status=published:
"article"
"published"
Проверка наличия поля
Метод has проверяет, присутствует ли поле в запросе:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function store(Request $request)
{
if ($request->has('title')) {
echo "Title exists";
}
if ($request->has(['title', 'content'])) {
echo "Both fields exist";
}
}
}
?>
Выборка определённых полей
Метод only возвращает только указанные поля, а except возвращает все поля кроме указанных:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function store(Request $request)
{
$res = $request->only(['title', 'content']);
$res = $request->except(['_token', 'password']);
echo $res['title'];
}
}
?>
Работа с файлами
Метод file возвращает загруженный файл, а hasFile проверяет наличие файла:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function upload(Request $request)
{
if ($request->hasFile('image')) {
$file = $request->file('image');
$path = $file->store('images');
echo $path;
}
}
}
?>
Получение заголовков и куки
Метод header получает значение заголовка, а cookie - значение куки:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function store(Request $request)
{
$userAgent = $request->header('User-Agent');
$sessionId = $request->cookie('session_id');
echo $userAgent;
echo $sessionId;
}
}
?>
Работа с JSON-запросами
Метод json получает данные из JSON-запроса в виде массива:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function store(Request $request)
{
$res = $request->json()->all();
echo $res['title'];
}
}
?>
Проверка метода запроса
Метод method возвращает HTTP-метод запроса, а isMethod проверяет соответствие:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function store(Request $request)
{
if ($request->isMethod('post')) {
echo "POST request";
}
echo $request->method();
}
}
?>
Получение информации о пользователе
Метод user возвращает аутентифицированного пользователя, а ip - IP-адрес клиента:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function index(Request $request)
{
$user = $request->user();
$ip = $request->ip();
echo $user->name;
echo $ip;
}
}
?>
Валидация данных запроса
Метод validate выполняет валидацию данных запроса и возвращает отвалидированные данные:
<?php
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|max:255',
'content' => 'required',
'status' => 'in:draft,published'
]);
echo $validated['title'];
}
}
?>
Работа через глобальный помощник
Глобальная функция request предоставляет доступ к объекту запроса в любом месте приложения:
<?php
class ArticleController extends Controller
{
public function index()
{
$title = request()->input('title');
$all = request()->all();
$method = request()->method();
echo $title;
}
}
?>