Дані запиту приходять з різних місць, і Laravel дає окремі методи для кожного.
input() - тіло запиту й рядок запиту разом:
$name = $request->input('name');
$city = $request->input('address.city'); // вкладене поле через крапку
$tags = $request->input('tags.*.name'); // усі значення з масиву
$page = $request->input('page', 1); // значення за замовчуванням
Для форм (application/x-www-form-urlencoded, multipart/form-data) і JSON-тіла (application/json) працює однаково. Якщо поле є і в тілі, і в рядку запиту, перевагу має тіло.
query() - лише рядок запиту (?sort=name&page=2):
$sort = $request->query('sort', 'created_at');
Корисно, коли важливо, звідки прийшло значення: наприклад, параметр фільтра не повинен підмінятися полем у тілі POST-запиту.
json() - лише JSON-тіло:
$items = $request->json('items');
Параметри маршруту - частина URL, а не вхідні дані запиту:
Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) { ... });
$request->route('post'); // з будь-якого місця, наприклад у middleware
Їх отримують аргументами контролера (з прив'язкою до моделі), а не через input().
Інші джерела:
| Метод | Що повертає |
|---|---|
$request->all() |
усі вхідні дані разом з файлами |
$request->only(['name', 'email']) |
лише вказані поля |
$request->except(['password']) |
усе, крім указаних |
$request->header('X-Request-Id') |
заголовок |
$request->cookie('theme') |
cookie (розшифрований) |
$request->file('avatar') |
завантажений файл |
Важливе правило: для збереження даних використовуйте не all() чи input(), а $request->validated() з Form Request - лише ті поля, які пройшли валідацію. Інакше клієнт може надіслати поля, яких ви не очікували.