Handling the Validation Result#
validate() returns ValidationResult.
$result = $validator->validate($data);
Pass/Fail Checks#
$result->passes();
$result->fails();
Validated and Typed Data#
validated() returns validated values.
typed() returns casted values when casts are configured; otherwise it matches validated().
$all = $result->validated();
$typed = $result->typed();
$subset = $result->only(['email', 'name']);
$withoutAge = $result->except(['age']);
$safe = $result->safe(['optional_field']);
$result->has('email');
$result->get('email');
Immutable Input Bag#
Use input() for typed read helpers over validated payload.
$input = $result->input();
$input->string('email');
$input->int('age');
$input->float('amount');
$input->bool('active');
$input->array('items');
$input->date('created_at');
$input->enum('status', App\Enums\OrderStatus::class);
$input->only(['email', 'age']);
$input->except(['password']);
$input->has('email');
$input->get('email');
Errors and Messages#
$errors = $result->errors();
$emailErrors = $result->errorsFor('email');
$firstForEmail = $result->first('email');
$firstAny = $result->firstError();
$result->hasError('email');
$result->errorCount();
$result->allErrors();
$result->messages(); // MessageBag
Failure Metadata#
Use failure metadata for API/UI mapping.
$result->failures();
// [
// [
// 'field' => 'email',
// 'rule' => 'email',
// 'message' => 'The Email must be a valid email address.',
// 'value' => 'bad-email'
// ]
// ]
$result->failuresFor('email');
API Error Formatters#
ValidationResult includes common API-ready error formats.
$result->toFlatErrors(); // normalized list
$result->toApiErrors(); // compact API shape
$result->toJsonApiErrors(); // JSON:API errors
$result->toProblemJson(); // RFC 7807-style payload
DTO and Serialization#
$dto = $result->toDTO(); // uses setDtoClass() if configured
$arr = $result->toArray(); // includes errors, failures, validated, typed
$json = $result->toJson(); // errors JSON
When a DTO class is configured, constructor parameter names are matched from typed payload keys when possible.
Data Utilities#
$filtered = $result->filter(fn ($value, $key) => str_starts_with($key, 'user_'));
$mapped = $result->map(fn ($value) => is_string($value) ? trim($value) : $value);
$merged = $result->merge($anotherResult);
Fluent Helpers#
$result
->whenPasses(function (array $typedData) {
// Runs on success
})
->whenFails(function (array $errors) {
// Runs on failure
});
$result->throw(); // throws ValidationException when failed