У 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 з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel
Laravel Livewire випустив нову версію 3.6, яка приносить з собою цікаві HTML-директиви для управління видимістю DOM-елементів і JavaScript-діями. Досліджуйте нові можливості Livewire, що допоможуть вам створити ще більш інтерактивні користувацькі інтерфейси!
Встановлення Xdebug може бути складним завданням, але в цій статті ми розкриємо, як швидко та просто налаштувати його за допомогою Docker на прикладі Laravel. Дочитайте до кінця, щоб дізнатися, як за кілька хвилин зробити Xdebug вашим надійним помічником у розробці