Lightbulb Router – rozšířené routování přímo v šablonách
- ptacek.pavel
- Člen | 27
Žá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 :-)