Přeskočení v routování k dalšímu záznamu

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

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?

phx
Člen | 651
+
0
-

Prijde mi trochu dive mit na jedne URL vice ruznych veci. Neboli mit kolizi v rourach.

PetrP
Člen | 587
+
0
-

Co takle to řešit jinak a v prvním presenteru před renderováním forwardovat na jiný presenter?

<?php
class DefaultPresenter extends Presenter
{
	protected function startup()
	{
		if (nejakym zpusobem zjistim, ze se me request netyka)
		{
			$this->forward('Another:');
		}
	}
?>
vlki
Člen | 218
+
0
-

Take bych byl pro zavedeni neceho takoveho.

Nastinim i prakticke vyuziti… Aplikace dynamicky generujici ruzna url slozena z modulu, kde jednotlive moduly muzou zasahovat do generovani tech url.

A.
Člen | 87
+
0
-

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
+
0
-

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
+
0
-

Ú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.