<?> PHP NOVA invictum.hr
Izdanje 2026.
Poglavlje 42

Forme i validacija

Laravelovu validaciju, CSRF zaštitu, old input i Form Requeste koristimo za kratke kontrolere i dosljedne forme.

26 min čitanja Srednje razina PHP 8.5 ciljna verzija

Nakon ovog poglavlja

Što ćete znati napraviti

  • Napraviti Blade formu sa CSRF tokenom i prikazom pogrešaka.
  • Izdvojiti validaciju i autorizaciju u Form Request.
  • Sigurno spremiti samo validated podatke.

Siguran zadani tok

CSRF, metoda i stare vrijednosti

@csrf dodaje skriveni token koji web middleware provjerava. @method simulira PATCH ili DELETE. old vraća prethodni unos nakon automatskog preusmjeravanja zbog pogrešne validacije, a @error prikazuje poruku uz polje.

Blade forma
<form method="post" action="{{ route('articles.store') }}">
    @csrf

    <label for="title">Naslov</label>
    <input id="title" name="title" value="{{ old('title') }}">

    @error('title')
        <p role="alert">{{ $message }}</p>
    @enderror

    <button>Spremi skicu</button>
</form>

Ugovor zahtjeva

Autorizacija i pravila prije kontrolera

Form Request ima authorize i rules. Ne vraćamo true automatski ako je radnja zaštićena; provjeravamo policy ili drugu ovlast. Nakon prolaska kontroler koristi validated ili safe podatke, ne cijeli request.

Form Request
<?php

final class StoreArticleRequest extends FormRequest
{
    public function authorize(): bool
    {
        return $this->user()?->can('create', Article::class) ?? false;
    }

    public function rules(): array
    {
        return [
            'title' => ['required', 'string', 'max:200'],
            'body' => ['required', 'string', 'max:100000'],
        ];
    }
}

Tanak HTTP sloj

Validated podaci u servis ili model

Kontroler koordinira: primi već autoriziran zahtjev, pozove aplikacijsku operaciju i vrati redirekciju. Slug, author_id i početni status određuje server. Poslovno složen postupak izdvajamo u action/service klasu i transakciju.

Kontroler store
<?php

public function store(StoreArticleRequest $request): RedirectResponse
{
    $article = $request->user()->articles()->create([
        ...$request->validated(),
        'slug' => Str::slug($request->string('title')) . '-' . Str::random(6),
        'status' => ArticleStatus::Draft,
    ]);

    return to_route('articles.show', $article)
        ->with('status', 'Skica je spremljena.');
}

Primijenite naučeno

Vježba: Create i edit članak

Dodajte Laravel forme za stvaranje i uređivanje članka.

  1. Napravite zasebne Form Requeste ili ponovno upotrebljiva pravila.
  2. Dodajte policy provjeru za uređivanje.
  3. Spremite isključivo validirana i poslužiteljski određena polja.

Za provjeru i nastavak

Službeni izvori