Ústředním místem zpracování veškerých požadavků přicházejících od klienta je Front Controller. Jak již bylo ukázáno, volá se na jednotném URL http://www.example.com/index.php. Ve skutečnosti je včetně všech souvisejících souborů umístěn mimo webový prostor v adresáři obecně nazývaném SYS_ROOT a do uvedeného souboru index.php se po nastavení základních konfiguračních direktiv pouze vkládá. Je tomu tak jednak z bezpečnostních důvodů, aby nebylo možné některou z jeho souvisejících knihoven otevřít přímým voláním, a jednak to umožňuje mít více různých souborů ve webovém prostoru, které budou sdílet stejný Controller. Typický obsah souboru index.php vypadá například takto:
<?php
if (!Defined("DB_TYPE")) define ("DB_TYPE", "mysql");
if (!Defined("DB_SERVER")) define ("DB_SERVER", "localhost");
if (!Defined("DB_NAME")) define ("DB_NAME", "phpbase");
if (!Defined("DB_USERNAME")) define ("DB_USERNAME", "username");
if (!Defined("DB_PASSWORD")) define ("DB_PASSWORD", "password");
if (!Defined("DB_EMAIL")) define ("DB_EMAIL", "info@jantichy.cz");
if (!Defined("DB_PERSISTENT")) define ("DB_PERSISTENT", "0");
if (!Defined("SYS_ROOT")) define ("SYS_ROOT", "/home/app/system");
if (!Defined("MOD_ROOT")) define ("MOD_ROOT", "/home/app/modules");
require SYS_ROOT . "/system.php";
?>
Po obdržení požadavku od klienta provede Controller na základě případného parametru SCRIPT požadovanou operaci a podle jejího výsledku a případného parametru PAGE pak zašle prohlížeči zpět výslednou stránku. Mezitím ale provádí celou řadu dalších úkonů. Celý proces zpracování požadavku si podrobněji popíšeme dále. Předtím je ale nutné se zmínit o stránkách se zvláštním významem.
Některé stránky mají pro systém zvláštní význam. Controller je vrací klientovi automaticky ve specifických případech. Jedná se o stránku defaultní, logovací, chybovou pro neoprávněný přístup a chybovou pro nenalezenou komponentu.
Defaultní stránku vrátí systém uživateli vždy, když Controller neví, jak jinak následující stránku určit. Typicky k tomu dojde v případech, kdy pošleme serveru prázdný dotaz http://www.example.com/index.php bez zadání parametrů PAGE a SCRIPT, anebo když prováděný skript žádnou následující stránku neurčí. Za defaultní stránku je vhodné nastavit hlavní stránku celé aplikace.
Login stránku vrátí systém nepřihlášenému uživateli, který se pokusil spustit jemu nepřístupný skript či otevřít jemu nepřístupnou stránku. Login stránka by měla obsahovat formulář pro přihlášení uživatele. Zároveň dojde k dočasnému uchování původního dotazu. Ten je pak proveden bezprostředně po úspěšné autentizaci (viz kapitolu Timeout a ošetření nezpracovaných dat).
Před otevřením login stránky nekontroluje systém její existenci, proto musí být nutně v aplikaci přítomna. V opačném případě dojde k chybě. Systém také neověřuje případná přístupová práva, stránka se proto v daném případě zobrazí každému nepřihlášenému uživateli bez ohledu na její aktuální nastavení přístupu.
Chybová 403 stránka se vrátí přihlášenému uživateli, který se pokusil spustit jemu nepřístupný skript či otevřít jemu nepřístupnou stránku. Měla by obsahovat příslušnou chybovou hlášku a případně vysvětlující text. Na samém počátku jejího kódu je vhodné odeslat HTTP hlavičku Header("HTTP/1.0 403 Forbidden").
Před otevřením 403 stránky nekontroluje systém její existenci, proto musí být nutně v aplikaci přítomna. V opačném případě dojde k chybě. Systém také neověřuje případná přístupová práva, stránka se proto v daném případě zobrazí každému přihlášenému uživateli bez ohledu na její aktuální nastavení přístupu.
Chybová 404 stránka se vrátí každému uživateli, který se pokusil spustit neexistující skript či otevřít neexistující stránku. Inteligentní 404 stránky provádějí analýzu původního uživatelova požadavku a nabízejí odkazy na odpovídající existující stránky. Určitě by se ale měla přinejmenším vypsat příslušná chybová hláška a případně vysvětlující text. Na samém počátku kódu je vhodné odeslat HTTP hlavičku Header("HTTP/1.0 404 Not Found").
Před otevřením 404 stránky nekontroluje systém její existenci, proto musí být nutně v aplikaci přítomna. V opačném případě dojde k chybě. Systém také neověřuje případná přístupová práva, stránka se proto v daném případě zobrazí každému uživateli bez ohledu na její aktuální nastavení přístupu.
Ještě než se Controller začne vůbec zabývat zaslanými parametry, provede na počátku každého zpracování požadavku nezbytné inicializační a kontrolní operace:
načte případné konfigurační direktivy ze souboru SYS_ROOT/config.php;
naváže spojení s databází a načte z ní aktuální konfiguraci aplikace;
přilinkuje ostatní knihovny frameworku uložené v SYS_ROOT;
spustí interní měření doby běhu zpracování;
vytvoří novou session či obnoví aktuální session;
nastaví či obnoví základní session proměnné nezbytné pro běh frameworku;
zkontroluje, zda není potřeba zpracovat požadavky dosud nezpracované v důsledku předchozího timeoutu;
v případě, že se již aktuální uživatel přihlásil, zkontroluje platnost takového přihlášení;
je-li přihlášení platné, otiskne do databáze časové razítko, v opačném případě uživatele automaticky odhlásí;
zaznamená požadavek klienta do logu.
Pak teprve přistoupí Controller ke zpracování parametrů klientského dotazu. Nejprve zjistí, zda byl parametrem SCRIPT určen zpracovávající skript, zkontroluje jeho existenci a přístupová oprávnění aktuálního uživatele k němu. V případě jakékoliv chyby určí, že se má posléze vrátit příslušná stránka se zvláštním významem. Konkrétně, při neexistenci požadovaného skriptu se jedná o 404 stránku, při odmítnutém přístupu se jedná buď o 403 stránku nebo logovací stránku, to podle toho, zda je již uživatel přihlášen či nikoliv. Naopak jestliže je vše v pořádku, skript se provede. Skript přitom může, ale nemusí, sám v rámci svého zpracování funkcí Direct či Redirect určit, která další stránka se má otevřít. Controller nakonec provede zápis o otevíraném skriptu do aplikačního logu. Vše je znázorněno v následujícím vývojovém diagramu:
Provedení požadovaného skriptu
Následně rozhoduje Controller o tom, kterou stránku odešle klientovi zpět jako odpověď na dotaz. Primárně se rozhoduje podle proměnné PAGE. Ta mohla být dána buď přímo klientem v příslušném parametru dotazu, nebo ji mohl nastavit Controller při neúspěšném pokusu o provedení skriptu (viz výše), anebo mohla být určena provedeným skriptem. Jestliže k ničemu takovému nedošlo a proměnná PAGE je prázdná, přiřadí ji Controller název defaultní stránky.
Potom se Controller snaží danou stránku otevřít, a to postupem analogickým výše uvedenému otevírání skriptu, včetně kontroly existence stránky a přístupových práv k ní. Teprve definitivní konečná stránka se odesílá klientovi zpět. Následuje příslušný zápis do aplikačního logu. Opět lze celý postup vyjádřit vývojovým diagramem:
Zobrazení požadované stránky
Obsah stránek vyjadřuje osobní názory, postoje a zkušenosti autora. Copyright © 2004–2010 Jan Tichý.