LEMONADE Dokumentace

Dokumentace.

Patnáct kapitol od instalace a struktury projektu po CLI a produkční nasazení.

Kapitola 10 z 15

Formuláře, validace a CSRF.

Ověřte vstup jednou, escapujte výstup a zapisující HTTP požadavky chraňte synchronizačním tokenem.

Validace vstupu

Injektujte FormValidation, získejte pole z parsed body a sestavte malé schéma. Po validate() pracujte s isValid(), errors() a validated().

Form validation
<?php

$payload = is_array($request->getParsedBody()) ? $request->getParsedBody() : [];

$result = $this->validator
    ->field('email', 'E-mail')
        ->required()
        ->email()
        ->maxLength(150)
    ->field('message', 'Message')
        ->required()
        ->maxLength(5000)
    ->validate($payload);

if (!$result->isValid()) {
    return $this->responses->json(['errors' => $result->errors()], 422);
}

Fluent schema se po validaci resetuje. Opakovanou validační logiku přesuňte do aplikační služby nebo explicitního ValidationSchema.

CSRF ochrana

Na zapisující routu připojte CsrfMiddleware. HTML formulář vloží token přes $this->csrfField(); pro AJAX použijte hlavičku X-CSRF-Token.

Route and view
<?php

use Lemonade\Framework\Security\Csrf\CsrfMiddleware;

$router
    ->postNamed('contact.store', '/contact', ControllerAction::for(ContactController::class, 'store'))
    ->middleware(CsrfMiddleware::class);

?>
<form method="post" action="<?= e($this->url('contact.store')) ?>">
    <?= $this->csrfField() ?>
    <button type="submit">Send</button>
</form>

Neplatný token vrátí 419 a controller se nespustí. Token neposílejte v query stringu.

Podrobná technická dokumentace na GitHubu