Presmerovanie po submitte formulara

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

Ako presmerovat formular na URL, z ktorej som na formular prisiel a vypisat flashmessage? Predpokladam, ze niekde v BasePresenteri si musim pravdepodobne zapamatat URL (ale ako riesit, ako si ju neprepisat ak sa nachadzam na formulari resp. ked si ju zapamatam a submittnem formular, potom do URL predchadzajucej adresy ulozim URL na formular a to mam to iste, ako redirect($this))?

Momentalne presmerovavam takto:

$this->flashMessage($this->translator->translate('flash.record_was_saved'), 'success');
$this->redirect('Wu:');

Velmi pekne dakujem za rady.

ali
Člen | 342
+
0
-

V presenteru, kde mas formular, si vytvor persistentni parametr

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

a do success metody si restorni request

public function formSuccess(Form $form)
{
  $this->restoreRequest($this->backlink);
  $this->redirect("Home:default");
}
Ryky
Člen | 14
+
0
-

používej vždy po submitě toto:

$this->redirect('this');

přesměruje tě na presenter v kterém to je a vykreslí přes renderDefault() :)
i v jakémkoli případě i když ten submit máš třeba v komponentě nad kterou jích je dalších 5 třeba :D

Azathoth
Člen | 495
+
0
-

Nebylo by lepší použít referer? $this->getHttpRequest()->getReferer()->url by mělo fungovat.

steelbull
Člen | 241
+
0
-

Ale ja by som chcel presmerovat nie na stranku odkial som formular poslal, ale na stranku na ktorej som bol predtym, ako som formular otvoril. Priklad:

/nette/www/item – zoznam itemov, pre pridanie noveho kliknem na „add“
/nette/www/add – vyplnim data a submittnem form

malo by ma presmerovat na /nette/www/item a return(‚this‘) po submitte ma presmeruje na /nette/www/add

matopeto
Člen | 395
+
0
-

Azathoth napsal(a):

Nebylo by lepší použít referer? $this->getHttpRequest()->getReferer()->url by mělo fungovat.

Nie, referer nie je spolahliva hlavicka a da sa podvrhnut. Ulozenie backlinku je spravny postup.

Ryky
Člen | 14
+
0
-

steelbull napsal(a):

Ale ja by som chcel presmerovat nie na stranku odkial som formular poslal, ale na stranku na ktorej som bol predtym, ako som formular otvoril. Priklad:

/nette/www/item – zoznam itemov, pre pridanie noveho kliknem na „add“
/nette/www/add – vyplnim data a submittnem form

malo by ma presmerovat na /nette/www/item a return(‚this‘) po submitte ma presmeruje na /nette/www/add

ahaa nevěděl jsem co myslíš ale vyřešíš to tímto

$this->redirect('nazevPresenteru:akce');

je to úplně stejné jak v latte :)

Editoval Ryky (12. 11. 2014 17:35)

steelbull
Člen | 241
+
0
-

@Ryky jj, tak to robim teraz, ale to moju situaciu neriesi. To by som si totiz musel nazovPresenteru aj akciu zapamatat:

Este raz si prosim precitaj;

steelbull napsal(a):

Ale ja by som chcel presmerovat nie na stranku odkial som formular poslal, ale na stranku na ktorej som bol predtym, ako som formular otvoril. Priklad:

/nette/www/item – zoznam itemov, pre pridanie noveho kliknem na „add“
/nette/www/add – vyplnim data a submittnem form

malo by ma presmerovat na /nette/www/item a return(‚this‘) po submitte ma presmeruje na /nette/www/add

matopeto
Člen | 395
+
0
-

Niekde si tu stranku zapamatat musis:)

Presne ako pisal @ali

funkcie restoreRequest a storeRequest su presne na ten tvoj USE Case.

na stranke, kde mas odkaz na formular, vytvoris backlink, posles do sablony s formularom:

niekde v presentri:

$backLink = $this->storeRequest(); $this->template->backLink = $backLink;

kde budes mat n:href="Formular:akcia, backLink => $backLink"

ten v si bud vlozis ako hidden do formulara, persistent, alebo ako parameter action napriklad.

a po spracovani pouzijes restoreRequest ktory urobi presmerovanie, za nim das este default presmerovanie, keby nebolo nic v backlinku ulozene.

Pripadne ak neovladas adresy, z ktorych mozes prist na formular (su napr. externe) mozes po odoslati pouzit javascript typu window.history.back();