Redirect z komponenty a zobrazeni ve stejnem view

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

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
+
0
-

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
+
0
-

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
+
0
-

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 musel redirect(..., array("values" => ...))

diky moc, tohle nakopnuti mi pomohlo, stacilo to prepsat na:

$this->redirect('this',array('values' => $form->values));