Přeskočení v routování k dalšímu záznamu
- A.
- Člen | 87
Ahoj,
da se vyresit následující problém? Mám dvě routy:
$router[] = new Nette\Application\Route('/<foo>/', array(
'presenter' => 'Default',
'action' => 'default',
));
$router[] = new Nette\Application\Route('/<bar>/', array(
'presenter' => 'Another',
'action' => 'default',
));
V prvnim presenteru nejakym zpusobem zjistim, ze se me request netyka a chtel bych beh aplikace „pustit v routovani do dalsiho kola“. Co jsem se dival, tak to ted mozne neni.
Reseni typu jine url u jedne z rout, ci vytvoreni jednoho presenteru, ktery by sam request redirectoval mi neprijde jako dobra cesta :-). Predstavoval bych si vyhozeni vyjimky, ktera by se v Application.php odchytila a zapamatovala by si, ze pristi loop ma routu matchovat az od naposledy pouziteho zaznamu. Co vy na to?
- A.
- Člen | 87
phx napsal(a):
Prijde mi trochu dive mit na jedne URL vice ruznych veci. Neboli mit kolizi v rourach.
Zalezi na uhlu pohledu. Nevidim nejmensi problem v mnou naznacenem reseni. Nekdy proste nazacatku nevim, zda-li je ta routa ta prava. A kdyz si proste usmyslim, ze tu druhou url vazne nechci mit necim prefixovanou, tak jsem v riti :).
PetrP napsal(a):
<?php class DefaultPresenter extends Presenter { protected function startup() { if (nejakym zpusobem zjistim, ze se me request netyka) { $this->forward('Another:'); } } ?>
No, tohleze prave nejde, jelikoz ja nevim, na jaky presenter mam forwardovat. To vi jen routa. A zjistovat si dalsi routu v presenteru se mi taky moc nelibi.
- PetrP
- Člen | 587
A. napsal(a):
No, tohleze prave nejde, jelikoz ja nevim, na jaky presenter mam forwardovat. To vi jen routa. A zjistovat si dalsi routu v presenteru se mi taky moc nelibi.
No jestli by se nevyplatilo tu logiku z routy předat do presenteru právě. Hodně asi záleží na konkrétním případu.
Taky není problém si přepsat routování.
- David Grudl
- Nette Core | 8218
Úkolem routeru je vybrat správný presenter. Takže řešením je vytvořit si vlastní router, třeba jako potomka třídy Route a tam logiku zapracovat.