У PHP типова маніпуляція дозволяє "1" сприйматися як булеве значення, а числові рядки – як цілі числа. Однак строгі параметри валідації Laravel вимагають точного відповідності типів для правил numeric, boolean та integer.
У режимі без строгих перевірок ці валідації приймають значення, що були приведені до типу:
Validator::make(['count' => '42'], ['count' => 'numeric']); // проходить
Validator::make(['active' => '1'], ['active' => 'boolean']); // проходить
Обидва випадки проходять валідацію, хоч насправді це рядки, а не справжні типи.
З строгими параметрами потрібна точна відповідність типу:
use Illuminate\Support\Facades\Validator;
Validator::make(['count' => '42'], ['count' => 'numeric:strict']); // не проходить
Validator::make(['count' => 42], ['count' => 'numeric:strict']); // проходить
Validator::make(['active' => '1'], ['active' => 'boolean:strict']); // не проходить
Validator::make(['active' => true], ['active' => 'boolean:strict']); // проходить
Validator::make(['age' => '25'], ['age' => 'integer:strict']); // не проходить
Validator::make(['age' => 25], ['age' => 'integer:strict']); // проходить
API-інтерфейси, які обробляють конфігураційні дані, виграють від використання строгих перевірок типів:
public function updateSettings(Request $request)
{
$validator = Validator::make($request->all(), [
'notifications_enabled' => 'boolean:strict',
'items_per_page' => 'integer:strict',
'refresh_rate' => 'numeric:strict',
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
$settings = $validator->validated();
if ($settings['notifications_enabled'] === true) {
$this->enableNotifications();
}
}
У випадку відсутності строгих перевірок, JSON-дані з рядковими значеннями, такими як {"notifications_enabled": "1", "items_per_page": "25"}, проходять валідацію, однак викликають проблеми з типами в логіці програми.
Поведінка валідації типів відрізняється між режимами:
Validator::make(['foo' => '1'], ['foo' => 'numeric:strict']); // не проходить
Validator::make(['foo' => 1], ['foo' => 'numeric:strict']); // проходить
Validator::make(['foo' => 1.5], ['foo' => 'numeric:strict']); // проходить
Validator::make(['active' => true], ['active' => 'boolean:strict']); // проходить
Validator::make(['active' => false], ['active' => 'boolean:strict']); // проходить
Validator::make(['active' => 1], ['active' => 'boolean:strict']); // не проходить
Validator::make(['count' => 42], ['count' => 'integer:strict']); // проходить
Validator::make(['count' => '42'], ['count' => 'integer:strict']); // не проходить
Валідація в строгому режимі запобігає проблемам з приведенням типів, вимагаючи, щоб значення відповідали очікуваному типу PHP абсолютно, а не просто могли бути перетвореними до нього
Laravel 13 вийде в березні 2026 року й вимагатиме мінімум PHP 8.3. Хочете дізнатися, як PHP‑атрибути для моделей, нові налаштування черг і метод Cache::touch() вплинуть на вашу розробку?
Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel
Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті