Nette 2.2: redirect, forward – samovolné přeskládání parametrů

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

Zdravím,
z jednoho presenteru předávám zpracování druhému:

class LvPresenter extends SecuredPresenter {
	...
	public function snimkyFormSubmitted(Form $form) {
		...
		$this->forward('Dif:default', $form->values->katastr_id, $form->values->snimek_id, true);
	}
}

class DifPresenter extends SecuredPresenter {
	public function actionDefault($katastr_id, $snimek_id, $ident) {
		dump($katastr_id, $snimek_id, $ident); die;
	}
}

Tento kód vyhodí:
`„Dif:default“ (11)
„616591“ (6)
„1“`
Tedy jako 1. parametr vrátí název metody, jako 2. parametr vrátí 1. parametr (katastr_id) a jako 3. parametr vrátí 3. parametr. Ale ztratil se ten druhý parametr. Stalo se mi to podruhé, poprvé jsem to s nějakými problémy obešel, nebo to odešlo samo… Nevíte někdo, co by mohlo být příčinou? Já vím, je to staré Nette, ale konverze probíhá jen ve volném čase…

David Matějka
Moderator | 6445
+
0
-

kdyz dumpnes v tom Dif presenteru $this->getParameters(), tak tam je co za hodnoty?

a funguje to, kdyz parametry predas pojmenovane? tzn

$this->forward('Dif:default', ['katastr_id' => $form->values->katastr_id, 'snimek_id' => $form->values->snimek_id, 'ident' => true]);
jik
Člen | 149
+
0
-

hm… zajímavé. Pokud volám redirect

$this->redirect('Dif:default', $form->values->katastr_id, $form->values->snimek_id, true);

class DifPresenter extends SecuredPresenter {
	public function actionDefault($katastr_id, $snimek_id, $ident) {
		dump($this->getParameters()); die;
	}
}

odpoví:
`array (5)
action ⇒ „default“ (7)
id ⇒ NULL
katastr_id ⇒ „Dif:default“ (11)
snimek_id ⇒ „667421“ (6)
ident ⇒ „1“`

Pokud použiji forward, je to správně:

$this->forward('Dif:default', $form->values->katastr_id, $form->values->snimek_id, true);

vrací:
`array (4)
katastr_id ⇒ „667421“ (6)
snimek_id ⇒ 209
ident ⇒ TRUE
action ⇒ „default“ (7)`

Pokud dám pojmenované parametry

$this->redirect('Dif:default', ['katastr_id' => $form->values->katastr_id, 'snimek_id' => $form->values->snimek_id, 'ident' => true]);

vrátí „skoro správně“ (ident =1 namísto true)
`array (5)
action ⇒ „default“ (7)
id ⇒ NULL
katastr_id ⇒ „667421“ (6)
snimek_id ⇒ „209“ (3)
ident ⇒ „1“`

forward to předá úplně správně:
`array (4)
katastr_id ⇒ „667421“ (6)
snimek_id ⇒ 209
ident ⇒ TRUE
action ⇒ „default“ (7)`