Posledně jsem zde nastínil návrhový vzor Model-View-Controller. Dneska bych na to rád navázal a naznačil základní implementaci controlleru pro webovou aplikaci, kterou je Page Controller. (O přístupech k implementaci modelu a view se snad rozepíšu jindy.)

Co je to Page Controller?
Page Controller je objekt pro obsluhu požadavku pro jednu stránku, nebo jednu akci. Měl by zpracovat vstupy od uživatele, aktualizovat podle nich model a následně zobrazit kus modelu skrze veiw uživateli. Je to nejzákladnější vzor při psaní PHP skriptů, kdy jeden PHP skript odpovídá jedné stránce, podobně jako u statického HTML.

Kdy se hodí použít Page Controller?
Tento návrhový vzor se hodí pro webové aplikace o několika málo stránkách, nebo aplikace se statickou navigací.

Jak to teda pracuje?
Základní myšlenkou tohoto návrhového vzoru je existence jednoho controlleru pro každou stránku. (V praxi to nemusí platit úplně přesně.) Striktněji můžeme říct, že existuje jeden controller pro každou akci (=kliknutí na odkaz nebo odeslání formuláře).

Základní úkoly page controlleru tedy jsou:

  • Přebrat parametry z URL a data z formulářů.
  • Předat data modelu.
  • Zvolit, které view zobrazí výsledky a předat mu řízení.

Schématický náznak implementace Page Controlleru

PHP:
<?php

$controller = new SeznamCdController();
$controller->spust();

class SeznamCdController{

    public function spust(){
        $seznamCdModel = new SeznamCdModel();
        $seznamCd = $seznamCdModel->vratVsechnyCd();
        if ( sizeof($seznamCd) != 0 ){
            include("seznam-view.php");
        }else{
            include("zadny-zaznam-view.php");
        }
    }
}

Co když máme ve všech controllerech část logiky na chlup stejnou?
Řešení je jednoduché. Společnou logiku přesuneme do bázového controlleru a v jednotlivých Page Controllerech využijeme dědičnosti.