Laravel Tutorials

Laravel Strict Validation for Type Checking

Published
Laravel Strict Validation for Type Checking image

PHP's type juggling allows "1" to pass as boolean and numeric strings to pass as integers. Laravel's strict validation parameters enforce exact type matching for numeric, boolean, and integer rules.

Without strict mode, these validations accept type‑coerced values:

Validator::make(['count' => '42'], ['count' => 'numeric']); // passes
Validator::make(['active' => '1'], ['active' => 'boolean']); // passes

Both pass validation despite being strings rather than proper types.

Strict parameters require exact type matches:

use Illuminate\Support\Facades\Validator;
 
Validator::make(['count' => '42'], ['count' => 'numeric:strict']); // fails
Validator::make(['count' => 42], ['count' => 'numeric:strict']); // passes
 
Validator::make(['active' => '1'], ['active' => 'boolean:strict']); // fails
Validator::make(['active' => true], ['active' => 'boolean:strict']); // passes
 
Validator::make(['age' => '25'], ['age' => 'integer:strict']); // fails
Validator::make(['age' => 25], ['age' => 'integer:strict']); // passes

API endpoints handling configuration data benefit from strict type validation:

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();
}
}

Without strict validation, JSON payloads with string values like {"notifications_enabled": "1", "items_per_page": "25"} pass validation but cause type issues in application logic.

Type validation behavior differs between modes:

Validator::make(['foo' => '1'], ['foo' => 'numeric:strict']); // fails
Validator::make(['foo' => 1], ['foo' => 'numeric:strict']); // passes
Validator::make(['foo' => 1.5], ['foo' => 'numeric:strict']); // passes
 
Validator::make(['active' => true], ['active' => 'boolean:strict']); // passes
Validator::make(['active' => false], ['active' => 'boolean:strict']); // passes
Validator::make(['active' => 1], ['active' => 'boolean:strict']); // fails
 
Validator::make(['count' => 42], ['count' => 'integer:strict']); // passes
Validator::make(['count' => '42'], ['count' => 'integer:strict']); // fails

Strict mode validation prevents type coercion issues by requiring values match the expected PHP type exactly, not just be castable to that type.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article