Nakon ovog poglavlja
Što ćete znati napraviti
- Postaviti public kao jedini web-dostupan direktorij.
- Razdvojiti HTTP, poslovnu logiku, podatke i prikaz.
- Pratiti jedan zahtjev kroz jednostavnu arhitekturu.
Jedna javna vrata
Samo public pripada web-poslužitelju
Konfiguriramo web-poslužitelj tako da je public document root. Ondje se nalaze index.php i javni asseti. src, config, storage, vendor i .env ostaju izvan izravnog URL pristupa. Time konfiguracija i izvorni kod nisu slučajno posluženi kao datoteke.
projekt/
├─ public/
│ ├─ index.php
│ └─ assets/
├─ src/
├─ templates/
├─ config/
├─ storage/
├─ tests/
├─ vendor/
└─ composer.json
Odgovornost po mjestu
HTTP nije poslovno pravilo
Router povezuje metodu i putanju s kontrolerom. Kontroler čita već normalizirani zahtjev, poziva aplikacijsku operaciju i bira odgovor. Domena provodi pravila, repozitorij skriva pohranu, a template prikazuje već pripremljene podatke.
Slojevi ne trebaju biti ceremonija. Za malu aplikaciju dovoljno je nekoliko mapa i dosljedno pravilo: SQL ne pripada predlošku, HTML ne pripada repozitoriju, a autorizacija se ne smije oslanjati na skriveni gumb.
Jedan tok
Ulazna točka sastavlja aplikaciju
Front controller učitava autoloader i konfiguraciju, postavlja rukovanje pogreškama, stvara router i šalje odgovor. Ovisnosti se sastavljaju na rubu aplikacije kako klase ne bi same tražile globalne servise.
<?php
declare(strict_types=1);
require dirname(__DIR__) . '/vendor/autoload.php';
$container = require dirname(__DIR__) . '/config/container.php';
$router = $container->get(Router::class);
$response = $router->dispatch(
$_SERVER['REQUEST_METHOD'] ?? 'GET',
parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH)
);
$response->send();
Primijenite naučeno
Vježba: Razdvojite malu aplikaciju
Postojeću kontaktnu formu podijelite na javni ulaz, validaciju, spremanje i template.
- Premjestite jedini javni index.php u public/.
- Izdvojite validaciju u zasebnu funkciju ili klasu.
- Templateu predajte samo podatke potrebne za prikaz.
Za provjeru i nastavak