Jak změnit action v presenteru s předáním nových parametrů?

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

Mám situaci, kdy v jednom presenteru mám dvě view, list a detail. Při volání listu je určitá situace, kdy se má „změnit“ na detail. Toto rozhodování mám v actionList(...). Nejřív jsem myslel, že zavolám this->changeView('detail'), ale myslím, že správnější by bylo changeAction('detail'). Problém ale je, že nevím, jak správně nastavit tomu detailu parametry, které normálně dostává. Jasně, mohl bych vytvořit ve třídě presenteru atribut pro tento parametr, ale to se mi nezdá moc čistý, vzhledem k přepnutí přes changeAction. Presenter má sice getParam, ale nic jako setParam jsem nenašel. Jediná možnost, kterou jsem na3el, je pomocí přesměrování redirect(':detail', array('param'=>'value')). Ale to mi zas přijde zbytečný a nešetrný. Takže kudy tudy cestička?

Edit 1:

Ještě upřesním, ten redirect použít nemůžu, protože vlastně změní url, což je nežádoucí.

(Jo a v tom předchozím příspěvku v redirect má být první parametr samozřejmě ‚detail‘, tj. bez dvojtečky :) )

Edit 2:

Tak jsem zjistil, slepejš jeden, že params je published, takže ten parametr můžu dát do něj. A že vlastně changeAction jen naství action a view na nový název.

Akorát zas co nechápu, že když nastavím ten nový parametr do params, tak to view, které je definováno public function renderDetail($id) do toho $id nic nedostane :(

Edit 3:

Ježkovioči, tak teď už nevím vůbec, já do toho pole params přidám parametr, ale když si ho dám vypsat v renderDetail, tak tam ten parametr není…

Editoval Petr Daňa (6. 2. 2009 16:39)

_Martin_
Generous Backer | 679
+
0
-

Pokud nechceš měnit URL, zkus vnitřní přesměrování, tuším, že použití by bylo následující: $this->forward('detail', $id);.

Petr Daňa
Člen | 109
+
0
-

Ha! To je přesně ono, díky moc. Nechápu, jak jsem to v tom presenteru přehlédl.

Mimochodem, než jsem zkusil tohle, tak jsem zjistil, že ten changeDetail taky dělá přesměrování, ikdyž nechápu jak, kvůli tomu se tam ani nedostal ten nový parametr. Když jsem použil jen changeView, tak to fungovalo i s novým parametrem.