Усі значення з HTTP-запиту - рядки (чи масиви рядків). input('active') поверне "0", "false", "on" чи null, і if ($request->input('active')) для "false" дасть true. Laravel має методи, що одразу приводять значення до потрібного типу.
Типізовані методи:
$request->string('name')->trim(); // Stringable - зручні методи рядків
$request->integer('per_page', 15); // int, за замовчуванням 15
$request->float('price');
$request->boolean('subscribe'); // true для "1", "true", "on", "yes"
$request->date('birthday'); // Carbon чи null
$request->date('starts_at', 'Y-m-d', 'Europe/Kyiv');
$request->enum('status', OrderStatus::class); // case enum чи null
$request->enums('statuses', OrderStatus::class); // масив case
$request->array('ids');
$request->collect('items'); // колекція
boolean() особливо корисний для чекбоксів: незазначений чекбокс взагалі не відправляється, і метод поверне false.
enum() повертає null для невідомого значення замість винятку - безпечно для фільтрів у рядку запиту.
Перевірки наявності:
| Метод | true, коли |
|---|---|
has('name') |
ключ є в запиті (навіть порожній) |
filled('name') |
ключ є і значення не порожнє |
missing('name') |
ключа немає |
isNotFilled('name') |
ключа немає чи значення порожнє |
anyFilled(['email', 'phone']) |
хоча б одне заповнене |
Умовна обробка без if:
$query = Order::query();
$request->whenFilled('status', fn (string $status) => $query->where('status', $status));
$request->whenHas('archived', fn () => $query->onlyTrashed());
Де це доречно, а де ні:
- фільтри, сортування, пагінація з рядка запиту - типізовані методи з безпечними значеннями за замовчуванням ідеальні;
- дані для збереження - через Form Request і
validated(): правилаboolean,date,Rule::enum()перевіряють і відхиляють неправильне значення з помилкою для користувача, а не тихо підставляютьnull; - у Form Request ті самі типізовані методи доступні через
$this->safe():$request->safe()->integer('quantity').