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.
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().
$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.
<?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);
}
}