Skip to content

Validation

Marko’s validation system provides clear, composable rules for validating input data. Inject ValidatorInterface and define rules as simple arrays --- validate() returns a ValidationErrors object you can inspect, or use validateOrFail() to throw on failure.

Terminal window
composer require marko/validation
<?php
declare(strict_types=1);
use Marko\Validation\Contracts\ValidatorInterface;
use Marko\Validation\Validation\ValidationErrors;
class PostController
{
public function __construct(
private readonly ValidatorInterface $validator,
) {}
public function store(array $data): void
{
$errors = $this->validator->validate($data, [
'title' => ['required', 'string', 'min:3', 'max:200'],
'body' => ['required', 'string'],
'email' => ['required', 'email'],
'status' => ['in:draft,published'],
]);
if ($errors->isNotEmpty()) {
// Handle validation errors
// $errors->all() returns ['field' => ['message', ...]]
}
}
}

The validate() method returns a ValidationErrors object:

use Marko\Validation\Contracts\ValidatorInterface;
use Marko\Validation\Validation\ValidationErrors;
$errors = $this->validator->validate($data, $rules);
if ($errors->isNotEmpty()) {
$errors->all(); // ['title' => ['The title field is required.']]
$errors->has('title'); // true
$errors->get('title'); // ['The title field is required.']
$errors->first('title'); // 'The title field is required.'
}

To throw an exception on validation failure, use validateOrFail():

use Marko\Validation\Contracts\ValidatorInterface;
use Marko\Validation\Exceptions\ValidationException;
try {
$this->validator->validateOrFail($data, $rules);
} catch (ValidationException $e) {
$errors = $e->errors(); // ValidationErrors instance
}
RuleDescription
requiredField must be present and not empty
stringMust be a string
intMust be an integer
emailMust be a valid email address
min:nMinimum length (string) or value (number)
max:nMaximum length (string) or value (number)
in:a,b,cMust be one of the listed values
urlMust be a valid URL
confirmedMust have a matching _confirmation field