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

Organizacija aplikacije

Od jedne PHP datoteke dolazimo do jasne ulazne točke, routera, kontrolera, domene i pogleda bez izgradnje vlastitog frameworka.

27 min čitanja Srednje razina PHP 8.5 ciljna verzija

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.

Predložena struktura
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.

public/index.php
<?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.

  1. Premjestite jedini javni index.php u public/.
  2. Izdvojite validaciju u zasebnu funkciju ili klasu.
  3. Templateu predajte samo podatke potrebne za prikaz.

Za provjeru i nastavak

Službeni izvori