Guida

Validazione

Schema di validazione, verifica singola dell’input e logica riutilizzabile in un servizio dedicato.

Crea uno schema di validazione

Usa ValidationSchema::create() quando lo schema deve essere esplicito o riutilizzabile. Preferisci piccole rules integrate.

example.php
use Lemonade\Framework\Validation\ValidationSchema;

$schema = ValidationSchema::create()
    ->field('title', 'Title')
        ->required()
        ->maxLength(120)
    ->end()
    ->field('published', 'Published')
        ->required()
        ->inList(['0', '1'])
    ->end();

Esegui la validazione una sola volta

Costruisci prima il payload, valida una sola volta e poi decidi in base a isValid(). Il risultato espone errors(), failedRules() e validated().

example.php
$payload = [
    'title' => $this->inputString('title'),
    'published' => $this->inputString('published', '0'),
];

$result = $this->validator()->validate($payload, $schema);

if (!$result->isValid()) {
    return $this->html(
        $this->view()->template('layouts.app', 'pages.article-form', [
            'errors' => $result->errors(),
            'values' => $payload,
        ]),
        422,
    );
}

Sposta la validazione ripetuta in un servizio

Se la stessa logica di validazione si ripete, spostala in un servizio di validazione dell’applicazione. Lo skeleton mostra questo approccio nel form di contatto.

example.php
<?php

declare(strict_types=1);

namespace App\Validation;

use Lemonade\Framework\Validation\FormValidation;
use Lemonade\Framework\Validation\ValidationResult;

final class ArticleValidator
{
    public function __construct(
        private readonly FormValidation $validator,
    ) {}

    /**
     * @param array<string, mixed> $data
     */
    public function validate(array $data): ValidationResult
    {
        return $this->validator
            ->field('title', 'Title')
                ->required()
                ->maxLength(120)
            ->validate($data);
    }
}