Redirect po zpracování formuláře

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

Zdravím a prosím o nasměrování.

Potřebuji po odeslání formuláře přesměrovat zpět na stránku kde jsem byl.
Snažím se si pomoci parametrem:

{plink detail 'parent' => $presenter->getParameter('id')}

a v komponentě formulářě si vytvořím hidden:

If ($this->getPresenter()->getParameter('parent')) {
	$form->addHidden('parent', $this->getPresenter()->getParameter('parent'));
}

V presenteru pak při ukládání:

If(isSet($data->parent)) {
	    $this->redTo = $data->parent;
	    unset($data->parent);
}

If(isSet($this->redTo)) {
    $this->getPresenter()->redirect('It:Detail', array('id' => $this->redTo));
}else {
    $this->getPresenter()->redirect('It:');
}

Problém je, že se mi parametr ztratí a to ihned po odeslání formuláře i přes to, že se ho snažím posílat v actionDetail:

actionDetail($parent = null) ...

Jak toto řešit lépe prosím?

Díky!

Editoval MW (23. 3. 2017 15:49)

CZechBoY
Člen | 3608
+
0
-

Menis nejak akci formu? Jinak se odesila form na stejnou stranku.
V success potom das redirect na this, pripadne muzes predat i nejaky parametry jako to id($this->getPresenter()->getParameter(‚id‘).

Editoval CZechBoY (23. 3. 2017 16:10)

matopeto
Člen | 395
+
0
-

Pripadne cez store/restorerequest

MW
Člen | 615
+
0
-

Action neměním, v success volám presenter->saveData, který vola model a uloží a pak redirectuju – také v presenteru.

Nedávno jsem řešil podobnou ztrátu parametru po odeslání formu, ale tady vážně nevím, jak to udělat.

Podle mě to při odeslání znovu sestavuje form, ale už tam nedá ten hidden .. proč? Jinak by v presenteru, kam posílám celý form byt musel byt i ten hidden parent…

Tomu storeRequest bych se právě rád vyhnul.. :)

Díky!

MW
Člen | 615
+
0
-

matopeto napsal(a):

Pripadne cez store/restorerequest

No nakonec přece jen zkouším storeRequest, ale narážím na problém, kdy vlastně uložit backlink:

V procesForm mám:

$this->getPresenter()->restoreRequest($this->getPresenter()->backlink);
$this->getPresenter()->redirect('It:');

a v presenteru zkouším např.:

public function renderDetail() {

	if($this->getParameter('parent')) {
	    $this->backlink = $this->storeRequest();
	}
}

ja potřebuji uživatele přesměrovat pouze v případě, že přichází z detailu určité položky, proto ten $parent …

Po odeslání se ale backlink evidentně přepíše a zůstávám na tam, kde je form …

Jak na to prosím?

Tedy z detailu zápisu odkazuji na form s parametrem $parent, na základě něj předvyplnuji form a po odeslání se chci vrátit na původní zápis..

Pokud na form přistupuji bez parametru $parent, chci se vrátit na default.. (to jediné funguje :))

Diky!

Editoval MW (24. 3. 2017 10:23)

MW
Člen | 615
+
0
-

Tak řešení:

Presenter:

/** @persistent */
    public $backlink = '';


public function renderDefault() {
	$this->backlink = '';
}

a v šabloně kde generuji odkaz:

{plink detail 'parent' => $presenter->getParameter('id'), 'backlink' => $presenter->storeRequest()}

no a v komponentě formu pak

$this->getPresenter()->restoreRequest($this->getPresenter()->backlink);
$this->getPresenter()->redirect('It:');

Díky !

Editoval MW (27. 3. 2017 9:48)