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

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 30 січня, 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 Boost — ваш стартовий набір для програмування з використанням штучного інтелекту

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

Logomark Logotype

Випущено Livewire 3.6

Laravel Livewire випустив нову версію 3.6, яка приносить з собою цікаві HTML-директиви для управління видимістю DOM-елементів і JavaScript-діями. Досліджуйте нові можливості Livewire, що допоможуть вам створити ще більш інтерактивні користувацькі інтерфейси!

Logomark Logotype

Налаштування Xdebug з Docker та PHP 8.4 всього за одну хвилину

Встановлення Xdebug може бути складним завданням, але в цій статті ми розкриємо, як швидко та просто налаштувати його за допомогою Docker на прикладі Laravel. Дочитайте до кінця, щоб дізнатися, як за кілька хвилин зробити Xdebug вашим надійним помічником у розробці