Redirect z komponenty a zobrazeni ve stejnem view
- GmCZ
- Člen | 3
Zacinam a nekde delam asi zakladni chybu. Chci po odeslani formulare zobrazit
odeslane hodnoty ve stejnem view.
U zpracovani formulare mam
public function FormularSubmitted($form)
{
$this->flashMessage($form->values['hodnota']); //pouze pro kontrolu
$this->redirect('this',$form->values);
}
flashmessage se potom normalne zobrazi, takze predpokladam, ze
$form->values je array a muzu ho odeslat tim redirectem. (zkousel jsem
i jine varianty, ale se stejnym negativnim vysledkem).
Pokousim se odeslane hodnoty zpracovat ve stejnem presenter:view pomoci
public function actionDefault($values)
{
$this->template->hodnota = $values['hodnota'];
}
Obsah ale nedostanu, jedine dve moznosti co mi jely, tak pomoci
$_GET[‚hodnota‘] (ten je v teto metode pristupny) a kdyz jsem to delal pres
persistentni prom. Tyhle reseni mi ale prijdou divne.
Pochopil jsem neco spatne, nebo nekde mam chybu, kterou nevidim? Diky
PHP 5.3 nette2.0alpha
- Filip Procházka
- Moderator | 4668
Dyštak si to polaď jak ti to vyhovuje :)
public function FormularSubmitted($form)
{
$session = $this->getFormCache();
$session[$form->getName()] = $form->values;
$this->flashMessage($form->values['hodnota']); //pouze pro kontrolu
$this->redirect('this');
}
protected function getFormCache()
{
return $this->getSession('Nette.Form.Cache');
}
public function actionDefault($values)
{
$session = $this->getFormCache();
$values = $session['Formular'];
unset($session['Formular']); // smazáni
$this->template->hodnota = $values['hodnota'];
}
ale spíš než mazat by bylo asi lepší nastavit expiraci, kdyby uživatel by klikl omylem na F5 data by se mu tímhle smazala :)
- Foowie
- Člen | 269
Do redirectu předáváš pole hodnot, přesněji řečeno seznam hodnot,
které mají být předány „action“ metodě. Tyto hodnoty musíš pak
v actionu definovat.
public function actionDefault($values)
→ definuješ proměnnou
$values, takže při redirectu bys
musel redirect(..., array("values" => ...))
- GmCZ
- Člen | 3
Foowie napsal(a):
Do redirectu předáváš pole hodnot, přesněji řečeno seznam hodnot, které mají být předány „action“ metodě. Tyto hodnoty musíš pak v actionu definovat.
public function actionDefault($values)
→ definuješ proměnnou $values, takže při redirectu bys muselredirect(..., array("values" => ...))
diky moc, tohle nakopnuti mi pomohlo, stacilo to prepsat na:
$this->redirect('this',array('values' => $form->values));