Controller

Controller je základní stavební jednotka Háefka. Jméno controlleru musí mít suffix a musí být potomkem třídy Controller. Pro lepší organizaci kódu využívejte dědičnosti. Pokud potřebujete ve více controllerech provést tutéž činnost, vytvořte si předka. Svoje controllery začněte psát odděděním od AppController – univerzální třídy, která nepřidává žádnou funkčnost, je ale automaticky vytvořena, pokud ji vaše aplikace neobsahuje. Výhoda je taková, že když později zjistíte, že potřebujete přidat funkčnost pro všechny controllery, stačí zpětně vytvořit třídu AppController.

Action představují jednotlivé metody pojmenované obsahem action a suffixem Action. Při routingu controller = posts a action = index bude tedy volána metoda indexAction controlleru PostsController.

Controller uložte do složky /app/controllers/ s názvem „v-pomlckovem-formatu“. Pomlčky předcházejí velkým písmenům. Více se dočtete ve jmenných konvencích.

Životní cyklus

  1. init() – voláno na po vytvoření controlleru, zde můžete ještě ovlivnit, který metoda se bude volat ($this->routing->action = "novy-metoda";)
  2. beforeAction() – voláno těsně před action
  3. action
  4. afterAction() – voláno těsně po action
  5. prepareTemplate() – voláno těsně před generováním šablony

Tvoření url

Ideologií odkazů ve frameworku je jejich relativní tvar vztažmo k serveru. Pokud tedy vytvoříte url pomocí Háefka, bude fungovat kdykoliv, ať už prezentaci přesunete v hierarchii serveru dolů, či nahoru. Relativní url (vztažmo k serveru) vždy začíná lomítkem:
/cesta/k/aplikaci/controller/action.

Totu cestu vytvoříte buď využitím proměnné {$base} (v šabloně), nebo ji získáte Http::$base. Dále danou url začnete lomítkem.

<a href="{$base}/controller/test">Test</a>

K tvorbě url slouží také metoda url controlleru. Pomocí ní můžete jednoduše vkládat do url parametry z routingu. Pár příkladu použití:

# uvažujeme umístění aplikace example.com/haefko-app/

$this->url('/') # /haefko-app/
$this->url('/posts/list'); # /haefko-app/posts/lists

Jak jsme již zmínili, v metodě můžete také jednoduše používat parametry z routingu. Pokud máme například naroutovaný parametr page:

$this->url('/posts/view/<:page>');
$this->url('/posts/delete/<:page>');
$this->url('/admin/edit/<:page>');

Může nastat případ, kdy chceme vytvořit odkaz na stejnou stránku, na které se nacházíme. Pak využijeme speciální výraz podobný proměnné z routingu: <:url:>

$this->url('<:url:>');
$this->url('<:url:>/rss');

Přesměrování

Po provedení změn v databázi se vždy hodí přesměrovat, aby uživatel procházením historie omylem neudělal další nechtěné změny. Metoda redirect() dělá přesně to, a navíc předané url zpracuje výše zmíněným způsobem.

$this->redirect('pages/view/<:page>');

Redirect() přeloží url do url formátu frameworku a předá ho metodě Http::redirec­tHeader(), kterou zároveň zavolá se správným kódem 303. Plus, aby se nám už nic dále „nepokazilo“, zavolá metoda exit.