Сувора валідація в Laravel для перевірки типів

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 22 березня, 2026
Вам цікаво, як строгі параметри валідації в Laravel можуть справді змінити вашу роботу з даними? Дізнайтеся, як точна відповідність типів може допомогти уникнути помилок у вашому коді

У 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 абсолютно, а не просто могли бути перетвореними до нього

Популярні

Logomark Logotype

Все, що потрібно знати про Laravel 13

Laravel 13 вийде в березні 2026 року й вимагатиме мінімум PHP 8.3. Хочете дізнатися, як PHP‑атрибути для моделей, нові налаштування черг і метод Cache::touch() вплинуть на вашу розробку?

Logomark Logotype

Laravel Boost — ваш стартовий набір для програмування з використанням штучного інтелекту

Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel

Logomark Logotype

Intervention Image: потужний інструмент для роботи з зображеннями у Laravel

Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті