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 17. 11. 2008 Edituj Historie Poslední změny

Routování

Moderní dynamické webové aplikace vyžadují sbírat požadavky zvenčí a na jejich základě přistupovat ke zdrojům dat, které poté patřičně odprezentují. Aby aplikace věděla jaké akce má vykonávat při různých požadavcích, musí se nejprve určit nějaká pravidla. Této technice se říká routování a typickým požadavkem zvenčí je pro webové aplikace URL adresa.

U webových aplikací založených na architektuře (nebo chcete-li) vzoru MVC a MVP je routování (nebo-li směrování) spojníkem právě mezi požadavkem zvenčí a správným řadičem, který požadavek zpracuje a naservíruje očekávaný výstup.

Právě tvar routy určuje, kterému presenteru a pohledu bude požadavek přidělen a jak bude zpracován. V současné době se setkáváme s „lidštějšími URL“ (cool, pretty nebo user-friendly URL), které jsou použitelnější a zapamatovatelnější než jejich „syroví“ předchůdci, ale daleko větší důležitost sehrávají v současně aktuálních optimalizací webů pro vyhledávače (SEO). Nette Framework na současné trendy myslí a vychází v tomto vývojářům plně vstříc. Routování navíc odstiňuje vývojáře od direktiv pro mod_rewrite, tudíž nemusíme definovat tvar rout na více místech – tím předcházíe i určitému procentu chybovosti aplikace.

Obecně lze 90% všech tvarů požadavků v běžné webové aplikaci charakterizovat tak­to:

  • zavolej určitou metodu (pohled) nějakého řadiče (objektu)
  • předej jí nějaké další identifikátory nebo parametry

Z pohledu OOP programování, nám tento způsob umožňuje přistupovat rovnou k metodám objektů, předávat jim ony parametry a pokochat se výsledkem.

Příklady tvarů URL požadavků:

  • example.com/article/show/5
  • example.com/article/edit/5
  • example.com/article/delete/5

nebo

  • example.com/category/show
  • example.com/category/show/5

První entita, na kterou v URL narazíme, je zároveň první dělící čárou aplikace – který řadič převezme požadavek? V případě příkladů to bude nejspíše, jak už je z názvu patrné, řadič pro manipulaci s články, v druhém případě pro manipulaci s logickým prvkem webu – kategorií.
Druhá entita je další dělící čárou – která metoda (akce) tohoto řadiče převezme požadavek? Zde postupně metoda pro výpis, editaci a smazání článku, v druhém případě pro zobrazení výpisu v kategorii.
A konečně, této metodě je třeba předat nějaké parametry – např. ID stránky nebo konkrétní pozici ve stránkování.

V jiných systémech má routování obrovských význam, naopak v Nette se jím netřeba zabývat. To je věc, která se může řešit až když je aplikace hotová. Navíc není vůbec žádný problém kdykoliv úplně změnit veškeré cesty pouze přepsáním rout – je tomu tak, protože routování je obousměrné, slouží jak k parsování, tak k generování cest.

Není tudíž kdykoliv docílit toho, aby požadavek example.com/article/my-new-article vedl na stejnou stránku jako „kdysi“ example.com/article/show/5 nebo si zjednodušit stránkování výpisu kategorií do následujícího tvaru: example.com/category/5.

Můžeme také označit některé, například starší, tvary cest za nepoužívané a zastaralé a říct tak aplikaci aby takovéto odkazy negenerovala, ale jen přijala a přesměrovala na správný (aktuální) tvar URL požadavku.

Výhoda Nette oproti některým jiným MVC frameworkům je v tom, že nemusí pojmenovávat routy. Routy mají minimální závislosti mezi vrstavama (např. není vztah mezi pořadím parametrů v routě a argumenty metody presenteru).

Viz také:

  • Model-View-Presenter
  • Nette\Applica­tion\Route
  • Nette\Applica­tion\MultiRou­ter
  • Nette\Applica­tion\SimpleRou­ter
  • Nette\Applica­tion\Presenter
« PresenterRequest MultiRouter »

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