Quick Usage#
This page shows copy-paste style flows you can use in real request handling.
API Signup Example#
<?php
use Infocyph\ReqShield\Validator;
$validator = Validator::make([
'name' => [
'rules' => 'required|string|min:2|max:80',
'sanitize' => ['trim', 'titleCase'],
'alias' => 'Full Name',
],
'email' => [
'rules' => 'required|email|max:255',
'sanitize' => ['trim', 'lowercase'],
'alias' => 'Email Address',
],
'password' => 'required|string|min:8|confirmed',
'age' => 'required|integer|min:18',
])->setCasts([
'age' => 'integer',
])->setCustomMessages([
'email.required' => ':field is required.',
'password.min' => ':field must be at least :min characters.',
]);
$result = $validator->validate($_POST);
if ($result->fails()) {
http_response_code(422);
echo json_encode([
'errors' => $result->errors(),
'failures' => $result->failures(),
]);
return;
}
$payload = $result->typed();
// Persist user with $payload
Checkout Contacts Example (Nested + Wildcards)#
<?php
use Infocyph\ReqShield\Validator;
$validator = Validator::make([
'contacts.*.name' => 'required|string|min:2',
'contacts.*.email' => 'required|email',
'contacts.*.phone' => 'nullable|string|min:8',
])->enableNestedValidation(false) // false => flatten only required paths
->setFieldAliases([
'contacts.*.email' => 'Contact Email',
]);
$result = $validator->validate([
'contacts' => [
['name' => 'John', 'email' => 'bad-email'],
],
]);
// Error key is contacts.0.email, alias is "Contact Email"
print_r($result->errors());
Update Flow Example (Conditional + Fragment)#
<?php
use Infocyph\ReqShield\Validator;
Validator::defineFragment('address', [
'line1' => 'required|string|max:120',
'zip' => 'required|digits:5',
]);
$validator = Validator::make([
'type' => 'required|in:personal,business',
'vat' => 'string',
])->useFragment('address', 'billing')
->sometimes('vat', 'required', fn (array $data): bool => ($data['type'] ?? null) === 'business')
->when(
fn (array $data): bool => ($data['type'] ?? null) === 'business',
fn (): array => ['billing.company_name' => 'required|string|max:120'],
)
->enableNestedValidation();
$result = $validator->validate($input);
if ($result->passes()) {
$safeData = $result->validated();
}