Jak změnit action v presenteru s předáním nových parametrů?
- Petr Daňa
- Člen | 109
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
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
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.