Implementace vlastní routovací třídy
- knyttl
- Člen | 196
Dobrý den,
rád bych dosáhl vlastního routování tak, že na základě druhé úrovně URL a databáze budu volit presenter s parametry, např.:
/cs/toto-je-nejaka-udalost/
- nejprve ověří, že cs je jazyk a v databázi zjistí, že „toto-je-nejaka-udalost“ je skutečně událostí, zavolá tedy presenter „events“ a předá mu id události.
/en/toto-je-nejaky-clanek/
- en je jazyk; mezi událostmi nebylo nalezeno, proto hledá mezi články, najde, proto zavolá presenter „articles“ a předá mu id článku.
Rád bych si tedy vytvořil vlastní třídu, která toto zajistí. Z dokumentace není zřejmé, kam by se vytvořený router měl v adresářové struktuře umístit, ani jak jej správně includovat.
Jeho třída má být děděna od Route, nebo od IRouter?
Děkuji.
- Foowie
- Člen | 269
Koukni třeba na SimpleSeoRouter .
Z toho je patrné, že úplně stačí implementovat rozhrani
IRouter
.
Kam třídu umístíš, je vpodstatě na tobě. Můžeš ji klidně dát do
app/models
, app/models/routers
,
libs/routers
, nebo podobně.
Pokud používáš RobotLoader
, tak nemusíš třídu includovat
vůbec. Pokud ho nepoužíváš, použí standardní
include
/require
.
- knyttl
- Člen | 196
Díky moc, trochu jsem s tím pohnul, ale asi mi něco hrozně moc uniká.
Pokud mám router takhle:
$router[] = new Route('index.php', array(
'presenter' => 'Base',
'action' => 'default'
), Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>/<id>', array(
'presenter' => 'Events',
'action' => 'default',
'id' => NULL,
));
tak je vše v pořádku.
Pokud ale druhou část zakomentuju, tak mi nenajede ani Base a hlásí mi to:
Server Error
The server encountered an internal error and was unable to complete your request. Please try again later.
Proč se mi nezobrazí žádná laděnka?
Editoval knyttr (8. 5. 2010 13:35)