Lightbulb Router – rozšířené routování přímo v šablonách

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ptacek.pavel
Člen | 27
+
0
-

Žárovka byla, ehm, představena na minulé poslední sobotě – na prezentaci snad ani neodkazuji, ale je možné se podívat na koncept na vimeu (http://www.vimeo.com/22850334). V současnosti je celý koncept připraven na základě vlastního routování etc. – princip, který jsme zvolili z důvodu časové rychlosti výroby proof-of-concept řešení.

Momentálně jsme v procesu zahazování již vyvinutých kódů pro žárovku a implementaci jednotlivých features do „packu“, který je postaven přímo nad Nette Frameworkem.

Nad žárovkou tedy přemýšlíme tak, že by měla být „mod“ pro Nette (tj. něco jako Counter-Strike pro Half-Life :-) ) – kolekce různých udělátek a zjednodušení, zejména pro to, abychom mohli ve firmě najímat brigádníky bez zkušenosti s Nette, Zend nebo čímkoliv dalším, a oni přitom byli schopni nad žárovkou vytvářet projekty a nebo je upravovat. Cílovým uživatelem žárovky je tedy více-méně kodér a začátečník. My ostatní by jsme měli mít možnost i nadále používat funkce, na které jsme zvyklí.

Lightbulb Router

Ačkoliv přepis není ještě kompletní, s objevem Micro-presenteru a TemplateRouteru nette jsme se rovnou rozhodli uvolnit router, na kterém nám momentálně žárovka běží.

Kód je zde: https://gist.github.com/1033376

Oproti micro-presenteru se odlišuje několika věcmi. Jednak se nedefinuje pouze URL adresa, ale je možné předávat i přidávat další parametry etc.

Usage:

{* config url="vase/url/s/<parametrem>" [module=""] [presenter=""] [action=""] [flags=""] [metadata=""]
   [vase_dalsi="parametry"] *}

Syntax url="" parametru je stejná, jakou u Nette\Application\Routers\Route, tedy včetně volitelných, defaultních parametrů. Díky metadata="" parametru je možné i definovat filtry přímo v šabloně.

Metadata="" parametr obsahuje json_string, který je parsován do vícerozměrného pole. Veškeré parametry metadata přepisují samostatně definované parametry v rámci config řádku. Config řádek pro změnu přepisuje automaticky detekované názvy presenteru, modulu a action.

Presenter, action a modul jsou automaticky detekovány na základě toho, kde je .latte (.phtml) soubor uložen. Sympatické na template routeru je, že není nutné definovat $router[] = new Route(...) v rámci bootstrapu ale vše je zachováno přímo v šabloně, přičemž je zachována i standartní architektura Presenteru, akce a modulu.

Pokud to tedy nadefinuje v AdminModule/templates/Sign/login.latte, pak je použit modul Admin, a zavolány všechny metody *Login() v rámci SignPresenter-u. Neztrácím tedy nic z funkcionality, na kterou jsme zvyklí.

TemplateRouter dědí od Nette\Application\Routers\RouteList a tím pádem je zachována funkcionalita tagů {link} atp.

Komentáře, feedback a dotazy do mailu (birdie@animalgroup.cz) nebo twitteru @foglcz, nebo zde :-)