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

CRUD aplikacija

Spajamo routing, forme, validaciju, PDO i predloške u prvi cjeloviti modul za stvaranje, pregled, uređivanje i brisanje.

32 min čitanja Projektno razina PHP 8.5 ciljna verzija

Nakon ovog poglavlja

Što ćete znati napraviti

  • Mapirati CRUD radnje na HTTP metode i URL-ove.
  • Provesti isti tok validacije za create i update.
  • Zaštititi promjene CSRF tokenom i autorizacijom.

Predvidivi URL-ovi

Resurs članak ima sedam tipičnih ruta

Popis i detalj koriste GET. Forma za stvaranje i uređivanje također koristi GET, ali promjene idu kroz POST, PATCH i DELETE. U čistom PHP-u HTML forma može poslati skriveno _method polje, a router ga nakon CSRF provjere prevesti.

Resursne rute
GET    /articles           index
GET    /articles/create    create
POST   /articles           store
GET    /articles/{id}      show
GET    /articles/{id}/edit edit
PATCH  /articles/{id}      update
DELETE /articles/{id}      destroy

Jedna pravila, dva slučaja

Validacija prije repozitorija

Kontroler dohvaća i validira poznata polja. Store stvara novi objekt, update prvo učitava postojeći i provjerava smije li ga korisnik mijenjati. Jedinstvena pravila kod updatea trebaju zanemariti trenutačni zapis.

Nakon uspjeha preusmjeravamo na kanonski detalj. Ako se spremanje sudari s ograničenjem baze, hvatamo konkretan problem i vraćamo korisnu poruku ili ponavljamo transakciju kada je to sigurno.

Store tok
<?php

$data = validateArticle($_POST);

if ($data->hasErrors()) {
    return render('articles/form.php', ['errors' => $data->errors()]);
}

$articleId = $articles->create($data->value());
redirect("/articles/{$articleId}", 303);

Visok utjecaj

Brisanje mora biti namjerno i kontrolirano

Brisanje nikada ne ide GET vezom. Zahtijeva prijavu, autorizaciju, CSRF i potvrdu u sučelju. Za poslovne podatke često je bolji soft delete ili arhiviranje kako bi povijest ostala dostupna.

Dva korisnika mogu istodobno urediti isti zapis. Za važan sadržaj dodajte version ili updated_at provjeru i odbijte spremanje ako je zapis u međuvremenu promijenjen.

Optimističko zaključavanje
UPDATE articles
SET title = :title, body = :body, version = version + 1
WHERE id = :id AND version = :expected_version;

Primijenite naučeno

Vježba: CRUD bilješki

Izradite modul privatnih bilješki za prijavljenog korisnika.

  1. Implementirajte popis, stvaranje, uređivanje i brisanje.
  2. Svaki upit ograničite na user_id prijavljenog korisnika.
  3. Dodajte CSRF i PRG nakon svake uspješne promjene.

Za provjeru i nastavak

Službeni izvori