- Aplikace
- Databáze
- Šablony
- Formuláře
- Knihovny
- Návody
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
init()– voláno na po vytvoření controlleru, zde můžete ještě ovlivnit, který metoda se bude volat ($this->routing->action = "novy-metoda";)beforeAction()– voláno těsně před action- action
afterAction()– voláno těsně po actionprepareTemplate()– 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::redirectHeader(), kterou zároveň zavolá se správným kódem
303. Plus, aby se nám už nic dále „nepokazilo“, zavolá
metoda exit.
