| Autor | Zpráva | ||
|---|---|---|---|
| PetrM Profil * |
#1 · Zasláno: 28. 7. 2010, 14:18:39
Dobrý den.
Dělám metodu pro generování url stylem :
$articleUrl = $this->router->buildUrl('article/show/' . $article->alias, '/<controller>/<action>/<article>/');
V defaultním nastavení s mod_rewrite to vrátí něco ve stylu : Bez mod_rewrite by to vygenerovalo : S jiným patternem (druhý parametr buildUrl) třeba : Zajímá mě zda-li je to dobrý přístup a zda se tato metoda hodí do třídy Router? Děkuji. |
||
| Majkl578 Profil |
#2 · Zasláno: 29. 7. 2010, 00:43:33
Zkus se podívat sem jak se tohle řeší v Nette Frameworku (zaměř se na definici a na generování). Tam se routy definují při startu aplikace a následné generování odkazů probíhá na základě jiné syntaxe (jiné v tom smyslu, že požadavek na vytvoření je odstníněný od patternu routy, takže routu lze později změnit na jednom místě a ne různě po aplikaci).
|
||
| PetrM Profil * |
#3 · Zasláno: 29. 7. 2010, 15:57:03
Majkl578:
Co takhle?
$this->router->join('article/show/' . $article->alias, '/<controller>/<action>/<article>/', 'articleShow');
A potom v šabloně udělám {link:articleShow} Jinak měl bych ještě jeden dotaz. Když mám dva moduly Article a Categories no jenže v Categories potřebuji vygenerovat odkaz na článek (modul Article), jen vždy při zavolání třeba www.web.cz/categories/test-kategorie se tedy zavolá modul Categories ale ten nemá "ponětí" o tom jak generuje adresy Article, potřeboval bych to nějak centralizovat. Napadlo mě tyhle "obecné" routy do databáze, ale nevím jestli je to tak správně. Nebo mě napadlo udělat modules/Article/Router.php a pokud ho nějaký jiný modul bude potřebovat tak si ho načte a v tom budou ty routy toho Article. |
||
| Majkl578 Profil |
#4 · Zasláno: 29. 7. 2010, 16:04:45
PetrM:
Vezmu-li způsob, jakým se routy používají v Nette, pak by odkaz z Categories např. na Article (dejme tomu čtení článku - read) vypadal takto: {link Article:read $id}. V tuto chvíli nemám žádné ponětí jak výsledná URL bude vypadat a je mi to jedno, vím jen, že bude odkazovat tam kam má (přemýšlej nad tím v rámci aplikace, nikoliv HTTP dotazů).
Při vytváření odkazu se sestaví nějaké parametry (kam odkazovat, id článku) a postupně se volají všechny předem definované routy. Každá routa ověří svoji vhodnost pro daný požadavek a pokud pasuje, vytvoří URL. |
||
| Nox Profil |
#5 · Zasláno: 29. 7. 2010, 16:06:00
PetrM:
A co? $this->router->url('articleShow', array("article"=> $article->alias));(nevim jestli to není v Nette podobné, vycházím z Kohany) |
||
| PetrM Profil * |
#6 · Zasláno: 29. 7. 2010, 16:28:43
Majkl578
Ano asi chápu, ale pokud vím tak routy se definují za běhu a nikam se neukládají tudíž když člověk vejde na adresu web.cz/categories/test-kategorie tak se načte modul Categories a ten si tam náhází své routy. Tím pádem žádné routy ohledně modulu Article tam nebudou. Tudíž když tedy v šabloně výstupu Categories bude {link Article:read $id} tak musí nějak ten link převést na ten reálný. Takže bud načíst celý modul Article a zavolat jeho nějakou metodu, nebo udělat soubor modules/Article/Router.php který bude obsahovat routy toho daného moduly, takže by se načetl jen tento soubor a podle něj vygeneroval odkaz - přijde mi to méně náročný na výkon, protože když by těch modulů bylo 20 tak by načítání každého asi nebylo moudré. Chápu to správně? |
||
|
Časová prodleva: 15 let
|
|||
0