Nette Framework
  • Úvodní stránka
  • Download
  • Dokumentace
  • Fórum
  • Blog
  • Přispějte
  • Quick Start
    • Začínáme
    • Adresářová struktura
    • Vytvoření presenteru
    • Připojení šablony
    • Tvorba odkazů
    • Hezčí šablony
    • Zobrazení tabulky
    • Stránkování a řazení
    • Tvoříme komponentu
  • Nette
    • Základní třídy
    • Nette\Annotations
    • Nette\Component
    • Nette\Debug
      • Základy
      • Logování chyb
      • Firebug
    • Nette\Environment
    • Nette\Image
    • Nette\Object
    • Nette\String
  • Nette\Application
    • Application
    • AppForm
    • Control
    • Presenter
    • PresenterCompo­nent
    • PresenterRequest
    • Routování
    • MultiRouter
    • Route
    • SimpleRouter
  • Nette\Caching
  • Nette\Forms
  • Nette\IO\SafeS­tream
  • Nette\Loaders
  • Nette\Security
    • Bezpečnost aplikací
    • Identity
    • SimpleAuthenti­cator
    • Permission
    • Dynamická správa rolí a zdrojů
  • Nette\Templates
    • Template
    • Template Filters
    • Template Helpers
  • Nette\Web
    • Web
    • Ftp
    • Html
    • HttpRequest
    • HttpResponse
    • Session
    • User
Naposledy změněno 5. 1. 2009 Edituj Historie Poslední změny

Nette\Application

Zastřešuje chování Model View Presenteru.

Životní cyklus aplikace

Životní cyklus aplikace se dá rozdělit do těchto bodů:

  1. Router z URL vytvoří objekt PresenterRequest (obsahuje jméno presenteru);
  2. PresenterLoader ze jména presenteru odvodí třídu a případně název souboru;
  3. Presenter volá metody podle aktuálního view & scene (případně i subrequestu);
  4. Presenter načítá šablony, ve hře je název presenteru a view (resp. scene);
  5. 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řída Admin_Catalog_DefaultPresenter
  • Admin:Catalog:Default → třída Admin::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 formatPresenter­Class() a formatPresenter­File() 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 formatPrepare­Method() a formatRenderMet­hod(). Pro scene edit se budou volat metody prepareEdit() a renderEdit(). Další metody presenteru a jeho celý životní cyklus jsou popsány v Nette\Appli­cation\Presen­ter.

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 formatTemplate­LayoutFiles() & formatTemplate­Files(). 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.phtml
  • templates/AdminModule/CatalogModule/Default.@layout.phtml
  • templates/AdminModule/CatalogModule/@layout.phtml
  • templates/@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.phtml
  • templates/AdminModule/CatalogModule/Default.edit.phtml
  • `templates/@glo­bal.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é:

  • Model-View-Presenter
  • Fully qualified view
  • Generování odkazů a Neplatné odkazy
  • Suggested directory structure
  • Routování
  • Nette\Applica­tion\MultiRou­ter
  • Nette\Applica­tion\SimpleRou­ter
  • Nette\Applica­tion\Presenter
  • Nette\Applica­tion\Presenter API reference
« Nette\String AppForm »

Nette Framework powered | dibi powered | Texy! powered | Institut Školení PHP