Basic Usage#
This page covers the core validator flow and the most-used runtime options.
Create a Validator#
use Infocyph\ReqShield\Validator;
$validator = Validator::make([
'email' => 'required|email|max:255',
'username' => 'required|string|min:3|max:50',
'password' => 'required|string|min:8|confirmed',
]);
Rules can be:
A pipe string (
required|email)An array of strings/rule objects
A schema definition array with
rules,sanitize,cast,alias
$validator = Validator::make([
'email' => [
'rules' => 'required|email',
'sanitize' => ['trim', 'lowercase'],
'alias' => 'Email Address',
],
'age' => [
'rules' => 'required|integer|min:18',
'cast' => 'integer',
],
]);
Validate Data#
$result = $validator->validate($input);
if ($result->passes()) {
$data = $result->validated();
} else {
$errors = $result->errors();
}
See Handling the Validation Result for all result helpers.
Request Input Helpers#
Use static helpers when your input is already separated by source.
$result = Validator::fromArray($rules, $data);
$result = Validator::fromQuery($rules, $_GET);
$result = Validator::fromBody($rules, $body);
$result = Validator::fromFiles($rules, $_FILES);
For PSR-style request objects:
$result = Validator::fromServerRequest($rules, $request);
Field Aliases#
Use aliases for human-readable messages.
$validator->setFieldAliases([
'user_email' => 'Email Address',
'contacts.*.email' => 'Contact Email',
]);
Message Overrides#
Use setCustomMessages() to override default rule messages.
$validator->setCustomMessages([
'email.required' => ':field is required.',
'*.min' => ':field must be at least :min.',
'contacts.*.email.email' => 'Each contact email must be valid.',
]);
Message keys can be field.rule, field.*, *.rule, field, rule, and wildcard field paths.
Runtime Behavior#
$validator
->setFailFast(false) // collect all failing rules per field
->setStopOnFirstError(false) // continue all fields
->throwOnFailure(false); // return ValidationResult instead of throwing
Unknown Field Handling#
$validator
->allowUnknown(false); // reject fields not defined in schema
$validator->strict(); // alias of allowUnknown(false)
$validator->stripUnknown(); // drop unknown fields instead of failing
Throw on Failure#
use Infocyph\ReqShield\Exceptions\ValidationException;
try {
$validator->throwOnFailure()->validate($input);
} catch (ValidationException $e) {
$errors = $e->getErrors();
}
Conditional Rules#
Use sometimes() for field-specific conditional rules.
$validator->sometimes(
'vat',
'required',
fn (array $data): bool => ($data['type'] ?? null) === 'business',
);
Use when() to merge dynamic schemas.
$validator->when(
fn (array $data): bool => ($data['country'] ?? null) === 'US',
fn (): array => ['state' => 'required|string'],
);
Sanitizers, Casts, DTO#
$validator
->setSanitizers([
'email' => ['trim', 'lowercase'],
])
->setCasts([
'age' => 'integer',
'active' => 'boolean',
])
->setDtoClass(App\DTO\UserInput::class);
$result = $validator->validate($input);
$typed = $result->typed();
$dto = $result->toDTO();
Schema Fragments#
Validator::defineFragment('address', [
'line1' => 'required|string|max:120',
'zip' => 'required|digits:5',
]);
$validator = Validator::make([
'name' => 'required|string',
])->useFragment('address', 'billing');
Next Steps#
See Quick Usage for real-life endpoint examples
See Advanced Features for locale packs, schema export, and composition APIs
See Complete Rule Reference for all built-in rules