Метод input
Метод input класса Request предназначен для получения значения конкретного поля из входящего запроса. Он позволяет извлекать данные из всех источников: строки запроса (query), тела запроса (POST/PUT/PATCH) и даже из JSON-данных. Первым параметром передаётся имя поля, вторым (необязательным) - значение по умолчанию, которое будет возвращено, если поле отсутствует.
Синтаксис
<?php
$value = $request->input($key, $default);
?>
Пример
Давайте получим значение поля 'name' из запроса:
<?php
use Illuminate\Http\Request;
Route::get('/user', function (Request $request) {
$name = $request->input('name');
echo $name;
});
?>
Результат выполнения кода при GET-запросе /user?name=John:
"John"
Пример
Давайте получим значение поля 'email' с указанием значения по умолчанию:
<?php
use Illuminate\Http\Request;
Route::post('/profile', function (Request $request) {
$email = $request->input('email', 'default@example.com');
echo $email;
});
?>
Результат выполнения кода при POST-запросе без поля 'email':
"default@example.com"
Пример
Давайте получим вложенное значение из массива с использованием "точечной" нотации:
<?php
use Illuminate\Http\Request;
Route::put('/settings', function (Request $request) {
$theme = $request->input('user.preferences.theme', 'light');
echo $theme;
});
?>
Результат выполнения кода при PUT-запросе с JSON-данными {"user":{"preferences":{"theme":"dark"}}}:
"dark"
Пример
Давайте используем метод input для получения данных из формы в контроллере:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class UserController extends Controller
{
public function store(Request $request)
{
$user = new User();
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->age = $request->input('age', 18);
$user->save();
echo "User created successfully";
}
}
?>
Результат выполнения кода при POST-запросе с данными формы name=John&email=john@example.com:
"User created successfully"
Пример
Давайте получим несколько полей с помощью метода only, а затем используем input для отдельных полей:
<?php
use Illuminate\Http\Request;
Route::post('/register', function (Request $request) {
$validated = $request->only(['name', 'email', 'phone']);
$name = $request->input('name');
$email = $request->input('email');
$phone = $request->input('phone', 'not provided');
echo "Name: $name, Email: $email, Phone: $phone";
});
?>
Результат выполнения кода при POST-запросе с полями name=Alice&email=alice@example.com:
"Name: Alice, Email: alice@example.com, Phone: not provided"