Aplikační framework phpBASE

V terminologii MVC je systém phpBASE aplikační framework postavený na centrálním Front Controlleru [27]. Takový Front Controller se také nazývá Controller webové vrstvy (Web-Tier Controller). Přijímá a zpracovává všechny požadavky od uživatele zpravidla na jednom jediném URL. Na základě zaslaných parametrů rozhoduje, které funkce Modelu zavolá. Nakonec vybírá View, které se zašle klientovi jako odpověď na dotaz.

Zpracování požadavku klienta

Zpracování požadavku klienta

Na tomto místě je nutné malé upřesnění terminologických rozdílů mezi MVC a phpBASE. Tyto výrazy budou chápány jako ekvivalenty, nebude-li řečeno jinak:

Nadále budeme předpokládat, že náš Front Controller je umístěn pod URL http://www.example.com/index.php [9].

Když Controller obdrží HTTP požadavek, rozhoduje se o další akci zejména podle dvou parametrů, PAGE a SCRIPT. Samozřejmě může být zaslán jen jeden z nich, nebo třeba i žádný.

Parametr „PAGE“

Tento parametr určuje explicitně další stránku, která se má zobrazit. Například GET dotaz http://www.example.com/index.php?PAGE=main/contact zobrazí stránku s kontakty. Konkrétně tedy stránku contact z modulu main (pro bližší informace o modulech viz kapitolu Moduly). Stejného výsledku dosáhneme s parametrem PAGE předaným jako skryté pole ve formuláři odesílaném Controlleru metodou POST:

<form action="index.php" method="post">
    <input type="hidden" name="PAGE" value="main/contact" />

    <!-- pokračování formuláře -->
</form>

Klient odesílající jen parametr PAGE tímto pouze žádá o zaslání dané stránky, bez jakýchkoliv změn v aplikačních datech. V pojetí MVC tedy Controller vůbec nevolá žádnou funkci Modelu, pouze v odpovědi odešle zpět požadované View.

Není-li v dotazu parametr PAGE vůbec explicitně zadán, určí následující stránku na základě stavu aplikace i ostatních zaslaných parametrů sám Controller.

Parametr „SCRIPT“

Parametrem SCRIPT určuje klient akci, kterou si přeje provést. Na základě výsledku této akce (a případně i podle současně zaslaného parametru PAGE) pak Controller určí a vrátí zpět další stránku.

V praxi říká parametr SCRIPT systému, který soubor se skriptem má otevřít a provést pro zpracování zaslaného požadavku. Mějme například stránku pro nastavení osobních údajů o právě přihlášeném uživateli PAGE=user/edit. Zjednodušený formulář by vypadal třeba takto:

<form action="index.php" method="post">
    Jméno: <input type="text" name="firstname" />
    Příjmení: <input type="text" name="surname" />
    <!-- další údaje o uživateli -->
    <input type="submit" value="Uložit" />

    <input type="hidden" name="SCRIPT" value="user/edit" />
</form>

Po odeslání formuláře otevře Controller na základě skrytého parametru SCRIPT skript user/edit a provede kód v něm uložený. Ten pravděpodobně nějakým způsobem vezme parametry firstname, surname apod. a uloží je do databáze.

Je třeba si uvědomit, že stránka PAGE=user/edit a skript SCRIPT=user/edit jsou ve skutečnosti dva zcela odlišné soubory. Což odpovídá i pojetí MVC ve smyslu oddělení Modelu, Controlleru a View. Shodné symbolické jméno mají proto, že si jsou „obsahově“ blízké, uvedený skript prostě zpracovává data primárně z dané stránky (není to však samozřejmě podmínkou). Blíže viz kapitolu Komponenty.

Parametr SCRIPT může být také samozřejmě zasílán skrz GET požadavek. Třeba pro odhlášení uživatele zavoláme http://www.example.com/index.php?SCRIPT=user/logout.

Zbývá otázka, jak se na skripty dívat z pohledu MVC. Zde záleží na prioritách programátora a jeho pojetí skriptů. Buď je může chápat přímo jako část Modelu obsluhující určitou funkci. Toho využijí zejména programátoři, kteří neprogramují objektově. Skript pak přímo sám provádí zadanou akci. Například výše uvedený skript pro uložení osobních údajů by mohl vypadat (opět samozřejmě ve zjednodušené podobě) takto:

<?php
$firstname 
Trim($_POST["firstname"]);
$surname Trim($_POST["surname"]);
MySQL_Query("UPDATE user_info SET
    firstname='$firstname',
    surname='$surname'
    WHERE uid='$UID'"
);
?>

Druhou možností je pojmout skripty jako dílčí součást Controlleru. Front Controller si na základě hodnoty proměnné SCRIPT jakoby natáhne svou specifickou část, která teprve zavolá požadované funkce Modelu přes jeho propagované rozhraní. Opět zjednodušený příklad, kde je příslušný Model v podobě třídy CUser uložen v knihovně user.php:

<?php
require_once "user.php";
$user = new CUser($UID);
$user->Set($_POST["firstname"], $_POST["surname"]);
$user->Store();
?>