Redirect, routování a link

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

Nedávno jsem tu měl problém s prázdným action u formuláře. Problém jsem vyřešil doplněním metody attached `třídy `AppForm. Nicméně hned v dalším kroku jsem opět narazil na problém.

$this->redirect('this');

Laděnka vyhodí výjimku InvalidLinkException No route for Articles:search()“

Debug::dump(array($this->lastCreatedRequest, $httpRequest));

Výstup:

Notice: Undefined variable: httpRequest in /home/.../app/presenters/ArticlesPresenter.php  on line 144
array(2) {
   0 => NULL
   1 => NULL
}

Podle mě je to routováním, ale osobně v routách nic vyloženě špatně nevidím :(

$router = $application->getRouter();

$router[] = new Route('[index.php]', array(
	'presenter' => 'Homepage',
	'action' => 'default',
));

$router[] = new Route('[<admin admin>/]<type texts|books|documents|about>/<id>', array(
    'presenter' => 'Articles',
    'action' => 'show',
));

$router[] = new Route('[<admin admin>/]<type about>', array(
    'presenter' => 'Articles',
    'action' => 'show',
));

$router[] = new Route('[<admin admin>/]<type texts|books|documents>', array(
    'presenter' => 'Articles',
    'action' => 'search',
));

Netušíte někdo, kde je chyba? Díky moc.

Editoval Elijen (4. 9. 2010 15:27)

zarubik
Člen | 31
+
0
-

Možná je to blbost, ale podle php chyby nemáš definovanou proměnou $httpRequest.
To ale tvůj problém neřeší…

Elijen
Člen | 171
+
0
-

zarubik napsal(a):

Možná je to blbost, ale podle php chyby nemáš definovanou proměnou $httpRequest.
To ale tvůj problém neřeší…

Nj ale tu proměnou by nějak mělo inicializovat Nette a já nevím, proč to neudělá. Myslím, že to bude právě těma routama.

zarubik
Člen | 31
+
0
-

Nene to si nepřiřadí samo to musis normálně:

$httpRequest = Environment::getHttpRequest();

Kde voláš to

$this->redirect('this');

Zkoušel jsi na tej stránce dát do šablony {link this}? Jestli to vytvoří správně odkaz na stejnou stránku? Podle mě je to taky v routrách.

Elijen
Člen | 171
+
0
-

Jaj, myslis u toho dumpu, ne? Tam jsem to vazne jaksi zapomel :) … ale dump jsem delal jen proto, abych videl, proc to vyhnilo. V redirectu by si to Nette melo resit samo.

{link this} vyhodi „#“, takze bude skutecne problem s routama … podle me se tam nepreda parametr type, stejne jako to bylo v topicu s formularem. Proc ale? Musim ho nastavit jako persistentni nebo ho predat rucne?

Editoval Elijen (4. 9. 2010 15:59)

zarubik
Člen | 31
+
0
-

JJ, proto jsem psal, že to tvůj problém neřeší :)

Podle těch rout, bych přidal do BasePresenteru

/** @persistent string */
public $type;

Což si myslím, že by ti vyřesilo i minulý problém.

… Tak jsem to vyzkoušel jak to máš a funguje to. Musí tam být persistent pro $type.

Editoval zarubik (4. 9. 2010 16:30)

Elijen
Člen | 171
+
0
-

zarubik napsal(a):

JJ, proto jsem psal, že to tvůj problém neřeší :)

Podle těch rout, bych přidal do BasePresenteru

/** @persistent string */
public $type;

Což si myslím, že by ti vyřesilo i minulý problém.

… Tak jsem to vyzkoušel jak to máš a funguje to. Musí tam být persistent pro $type.

Funguje, dík moc :) … i když po pravdě mi přijde nastavování persistentních parametrů pomocí phpDoc jako prasárna.

redhead
Člen | 1313
+
0
-

Když to nechceš přes anotace, můžeš využít metodu getPersistentParams() (myslím, nepoužívám ji) kterou vrátíš jména persistentních proměnných v array.