Nette\Application
Zastřešuje chování Model View Presenteru.
Životní cyklus aplikace
Životní cyklus aplikace se dá rozdělit do těchto bodů:
- Router z URL vytvoří objekt PresenterRequest (obsahuje jméno presenteru);
- PresenterLoader ze jména presenteru odvodí třídu a případně název souboru;
- Presenter volá metody podle aktuálního view & scene (případně i subrequestu);
- Presenter načítá šablony, ve hře je název presenteru a view (resp. scene);
- Renderování: v tomto a předchozím bodě se obvykle vytváří odkazy na jiné presentery a view, do toho se zapojuje opět PresenterLoader a Router.
Routování
Routování má na starosti vytváření odkazů a hezkých URL, převod URL mezi moduly, presentery, pohledy a jejich stavy.
Routery:
- SimpleRouter :
index.php?... - Route :
/tiskarny/canon/mx440/
Router Nette\Application\Route má statické pole $styles,
které mimojiné určuje, že parametry module, presenter a view budou
transformovány (filtrovány) pomocí určitých funkcí. To zajistí převody
MyPresenter -> my-presenter atd. Už z routeru tedy vypadne
název presenteru ve tvaru PascalCase. Modifikovat chování lze buď úpravou
pole $styles, nebo přímo v definici routy použitím
modifikátoru: <presenter #mymod>. Filtry pak popisuje
struktura v $styles['#mymod'].
Všechny routery definované pro naši aplikaci jsou uchovávány v objektu
MultiRouter.
Pokud Vám nevyhovuje v něčem chování routerů, které jsou již obsaženy
v Nette, můžete si naimplementovat vlastní router. Jediný požadavek je
implementace rozhraní IRouter.
PresenterLoader
Výchozí loader ze jména presenteru odvodí třídu a případně název souboru takto:
Admin:Catalog:Default→ třídaAdmin_Catalog_DefaultPresenterAdmin:Catalog:Default→ třídaAdmin::Catalog::DefaultPresenter(v PHP 5.3 pokud se nezmění oddělovač jmenných prostorů)- Zkusí autoloading (pak umí i korigovat název presenteru, pokud nesedí velikost písmen)
- Zkusí soubor
AdminModule/CatalogModule/DefaultPresenter.php(case-sensitive)
Chování lze změnit úpravou metod formatPresenterClass() a formatPresenterFile() v PresenterLoader nebo nahrazením loaderu za svůj.
Vyvolání metod podle aktuálního view & scene
Presenter z názvu view (resp. scene) odvodí název patřičné metody formatPrepareMethod()
a formatRenderMethod().
Pro scene edit se budou volat metody prepareEdit() a
renderEdit(). Další metody presenteru a jeho celý životní
cyklus jsou popsány v Nette\Application\Presenter.
Načtení šablon
Presenter se pokusí podle svého názvu (nezaměňovat s názvem třídy)
načíst šablonu layoutu (ta je nepovinná) a šablonu scény.
Kde ji hledá určují metody formatTemplateLayoutFiles()
& formatTemplateFiles().
Všimněte si množného čísla v názvu – metody vrací pole možných
umístění seřazených podle priority.
Layout pro Admin:Catalog:Default bude hledat v souborech:
templates/AdminModule/CatalogModule/Default/@layout.phtmltemplates/AdminModule/CatalogModule/Default.@layout.phtmltemplates/AdminModule/CatalogModule/@layout.phtmltemplates/@layout.phtml
Soubory prefixované znakem @ nelze podstrčit jako view, tedy
mohou být ve stejné složce se šablonami views. Lze to použít i pro
„podšablony“, které se do jiných šablon inkludují.
Šablonu hledá v souborech:
templates/AdminModule/CatalogModule/Default/edit.phtmltemplates/AdminModule/CatalogModule/Default.edit.phtml- `templates/@global.edit.phtml
Chování lze, jak jistě tušíte, změnit úpravou metod format.
Odkazování
Při odkazování na jiné presentry je vhodné dodržovat konvenci PascalCase, ačkoliv PresenterLoader umí název korigovat.
Nette\Application\Router při vytváření URL má k dispozici
správně zapsaný název presenteru. Aby správně fungovalo vynechávání
defaultních hodnot, je potřeba i defaultní hodnoty zapsat správně.
Viz také:
