Skip to content

Formát zprávy – Validator API

Detailní pohled na Validator třídu a return types.


Helper funkce validation()

Nejjednoduší způsob – validuj jedno pole:

use function Petrovo\Validation\validation;

$error = validation(
    string $key,
    mixed $value,
    string $rule
): string|false

Vrací: - false – validace OK - string – chybová zpráva

Příklady:

// Email
validation('email', 'test@example.com', 'required|email');
// → false (OK)

validation('email', 'invalid', 'required|email');
// → "email validation failed"

// Heslo
validation('password', 'secret123', 'required|min:8');
// → false (OK)

validation('password', 'pass', 'required|min:8');
// → "password validation failed"

// Telefon
validation('phone', '+420777123456', 'required|phone_e164');
// → false (OK)

validation('phone', '777123456', 'required|phone_e164');
// → "phone validation failed"

Validator třída

Plná validace s custom zprávami:

use Petrovo\Validation\Validator;

$validator = new Validator(
    array $customMessages = []
);

Metody

make(array $data, array $rules): self

Nastav data a validační pravidla:

$validator->make(
    $_POST,  // data to validate
    [
        'email' => 'required|email',
        'password' => 'required|min:8',
    ]
);

Fluent return – vrací $this pro chaining.


validate(): void

Spusť validaci všech pravidel:

$validator->make($_POST, $rules);
$validator->validate();  // Projdi všechna pravidla

Postranní efekt: Vnitřně naplní $this->errors.


fails(): bool

Zkontroluj jestli validace selhala:

if ($validator->fails()) {
    // Má chyby
}

errors(): ValidationErrors

Vrátí ValidationErrors objekt s chybami:

$errors = $validator->errors();

echo $errors->first('email');

ValidationErrors třída

Kontejner pro chyby s metodami pro přístup:

all(string $format = ':message'): array

Všechny chyby jako flat array:

$errors->all();
// ['Email je povinný', 'Heslo je příliš krátké']

S HTML formátováním:

$errors->all('<span class="error">:message</span>');
// ['<span class="error">Email je povinný</span>', ...]

first(string $field): ?string

První chyba pole (nebo null):

$errors->first('email');
// "Email je povinný"

$errors->first('nonexistent');
// null

firstOfAll(): array

První chyba každého pole (asociativní):

$errors->firstOfAll();
// [
//     'email' => 'Email je povinný',
//     'password' => 'Heslo je příliš krátké',
// ]

Příklady flow

Jednoduchá validace

use function Petrovo\Validation\validation;

$error = validation('email', $email, 'required|email');
if ($error !== false) {
    echo "Chyba: " . $error;
    exit;
}

// Zpracuj data

Formulář s více poli

use Petrovo\Validation\Validator;

$validator = new Validator([
    'email' => 'Email je povinný',
    'password' => 'Heslo je příliš krátké',
]);

$validation = $validator->make($_POST, [
    'email' => 'required|email',
    'password' => 'required|min:8',
]);

$validation->validate();

if ($validation->fails()) {
    $errors = $validation->errors();

    // Odešli error response
    response()->json([
        'success' => false,
        'errors' => $errors->firstOfAll(),
    ], 422);
    exit;
}

// Pokračuj

JSON odpověď s HTML span

if ($validation->fails()) {
    $errorList = $validation->errors()->all('<span>:message</span>');

    response()->json([
        'success' => false,
        'messages' => $errorList,
    ], 422);
    exit;
}

Vlastní chybové zprávy

Nastavit v konstruktoru Validator:

$validator = new Validator([
    'email' => 'Email musí být vyplněn',
    'password' => 'Heslo musí mít minimálně 8 znaků',
]);

Pokud není definovaná zpráva pro pole, použije se default: "[field] validation failed".


Pipe syntax

Pravidla se oddělují |:

'required|email|min:8'

Parametry se předávají za ::

'min:8'       // min value/length 8
'max:255'     // max 255
'range:10,100' // between 10 and 100
'in:a,b,c'    // one of values
'regex:/^[A-Z]+$/'  // regex pattern

Performance

  • Všechna pravidla se spouští vždy (i při selhání prvního)
  • Chyby se akumulují – nebreakuje se na prvním selhání
  • Jednoduchá pravidla (required, email) jsou rychlá
  • libphonenumber (phone_e164) je pomalejší – cache pokud možno

Notes

  • Type strictnessdeclare(strict_types=1) – všechno typované
  • No dependencies – Rakit odstraněn
  • Transparent – vše čitelné, bez magic