Jarda Jirava

Vývojář a architekt řešení postavených na technologii .net framework. Zabývám se jak vývojem webových aplikací za pomoci asp.net, tak také desktopových aplikací winform. Při návrhu řešení a samotném vývoji pak využívám dlouholetých zkušeností se zpracováním obchodní logiky a pravidel aplikací získaných z vývoje komerčních aplikací pro finanční a bankovní instituce.

Microsoft MVP

Microsoft MVP - Client App dev

Poslední příspěvky

26
IV

Zend framework - kompletace

Jak jsem minule slíbil, blížíme se do finále. Vlastně by se dalo říct, že je to takové malé finále, protože těch témat, která se dají k Zend frameworku napsat je zatím spousta a prozatím se tímto tématem mnoho lidí nezabývá.

Model View Presenter

Posledním krokem ke kompletaci naší aplikace, která aplikuje návrhový vzor Model View Presenter je vytvoření modelu. Jelikož je toto pouze úvod, model bude skutečně jednoduchý, tak abych mohl demonstrovat jeho použití. V reálné aplikaci by se dalo předpokládat, že s modelem bude zároveň vytvořena servisní nebo-li business vrstva aplikace, která se bude starat o poskytování dat pro jednotlivé akce.

Náše třídy modelu pro aplikaci budou umístěny v adresáři models, který jsme si vytvořili hned na počátku při vytváření adresářové struktury aplikace. Každá třída by měla mít svůj vlastní soubor a též pojmenování třídy a souboru by mělo být shodné. Jelikož jsme uvedli adresář models jako include_path, můžeme používat oblíbenou statickou metodu Zend_Loader::loadClass pro načtení třídy k jejímu použití.

Já jsem vytvořil pouze jednoduchou třídu s dvěmy vlastnostmi, kterou nadále použiji a naplním v Controlleru a hodnoty z této třídy - Modelu - zobrazím ve View.

class TextStore {
 public $name;
 public $description;
}

 Kompletace - dáváme vše dohromady

Nyní již máme všechny potřebné třídy vytvořeny a je postačující vše poskládat jak skládanku a jít si hrát. Do vytvořeného výchozího controlleru nazvaného IndexController tedy doplníme následující kód:

function init() {
 $this->initView();
 Zend_Loader::loadClass('TextStore');
}

 

public function indexAction() {
 $this->view->title = "jirava.net - index"
 $store = new TextStore();
 $store->name = "Zend framework a Smarty template"
 $store->description = "úvodník do MVC frameworku pro PHP vývojáře"
 $this->view->store = $store;
 $this->render();
}

Ve funkci init(), která je volána při inicializaci controlleru, doplníme volání pro inicializace proměnné view. Voláním přepsané funkce initView() tak vytvoříme instanci Smarty engine, tak jak jsem jej popsal v minulém příspěvku o view Smarty. Zároveň v inicializační metodě požádáme o nahrání potřebných tříd, které budeme používat v daném controlleru.

Poté nám již zbývá implementovat výchozí akci indexAction(). Zde naplníme proměnné pro View, které použijeme ve vytvořeném template. Abychom měli ukázku toho, jak se dá použít náš model, vytvoříme si instanci třídy TextStore, naplníme ji a přiřadíme do proměnné. Implementace naší třídy pro Smarty zařídí, že dojde k vyvolání metody assign a přiřazení názvu proměnné a její hodnoty pro použití v template. Nakonec zbývá už jen požádat o vyrenderování výsledku vyvoláním metody render().

Doplnění k View

V příspěvku o složce View a využití Smarty jako šablonovacím systému jsem opoměl na několik věci, které se mi už nechtěly doplňovat do publikovaného příspěvku a tak si na ně udělám místo nyní.

Kam umisťovat šablony

Šablony pro naše jednotlivé akce se umísťují do adresáře views aplikace. Hierarchie a pojmenování je shodná podle názvu controllerů, případně modulů. S jediným rozdílem, že i pro výchozí controller Index je nutné vytvořit podsložku se stejným názvem. Dále platí pravidlo, že pokud použijeme pouze metodu render(), bude použit stejný název šablony (souboru) jako je název právě prováděné akce. Samozřejmě je možné předanými parametry metodě render toto chování upravit a požádat o vyrenderování jiné šablony.

Pro Smarty je zároveň nutné vytvořit adresář pro zkompilovanou šablonu a v případě, že chceme používat cache, tak také pro ni. Já jsem tyto adresáře umístil taktéž do adresáře views, ale toto chování se může změnit v konstruktoru třídy JiravaNet_View_Smarty.

Zdrojové soubory

Jak jsem slíbil tak také činím, k dispozici dávám zdrojové soubory této úvodní aplikace, která má za úkol seznámit PHPčkaře se Zend frameworkem. Aplikace obsahuje kompletní kód, tak jak byl v minulých příspěvcích popsán. Zároveň je ponecháno několik neokomentovaných implementací, které se pokusím vysvětlit zase někdy příště a zbývá také spousta věcí, které čekají na vysvětlení a implementaci.

Malé upozornění: Ve třídě Zend_Db_Statement_Db2 jsem doplňoval scházející uzavírací závorku u metody fetchObject.
Povzdechnutí: není nad možnost kompilace, i když jsem předpokládal, že pro Zend by to neměl být takový problém.

Publikováno pod: zend framework

8 komentářů

Přidejte komentář