Přesměrování na předchozí stránku po akci v presenteru
- Dark0ne
- Člen | 47
Zdravím,
řeším asi poměrně běžný problém, který jsem ovšem nikde nenašel
dořešený. Jde mi o to, že udělám v nějakém presenteru akci (např.
edit, delete, detail..) a po jejím úspěšném provedení se chci dostat na
předchozí stránku.
Pomohl by mi někdo zmodifikovat řešení, které slouží pro vrácení na
stejnou stránku?
Nějaký preseneter:
/** @persistent */
public $backlink;
public function beforeRender()
{
parent::beforeRender();
// save request, so current address
$this->backlink = $this->storeRequest();
}
public function editFormSucceeded(Form $form, $values) {
.....
$this->restoreRequest($this->backlink);
}
Díky moc za případné rady.
Editoval Dark0ne (18. 3. 2016 16:58)
- Unlink
- Člen | 298
Nemal by si to pridávať v before render, pretože to sa ti prepisuje, skôr by som odporúčal ten backlink vytvoriť až pri generovaní linku.
/** @persistent */
public $backlink;
$this->link('edit', ['id' => $id, 'backlink' => $this->storeRequest()]);
public function editFormSucceeded(Form $form, $values) {
.....
$this->restoreRequest($this->backlink);
}
čo je ale menší „problém“ tohto riešenia je to, že sa ti plní session, a expirácia sessions (ak budeš editovať viac ako 10 minút tak už backlink dostupný nebude).
Ja som niečo podobné riešil tak že som si posielal „returnUrl“ ako parameter. Tj.
/** @persistent */
public $returnUrl;
$this->link('edit', ['id' => $id, 'returnUrl' => $this->link('this')]);
Ale niekomu by mohlo vadiť toto prenášať v URL, ale keďže to používam pri ajax requestoch tak mi to je jedno :)
- Dark0ne
- Člen | 47
Nevadí mi, že to budu přenášet přes URL. Vím, jak bych to chtěl řešit, ale dostal jsem se k jednomu problému. Potřebuji přenášet tu hodnotu $backurl přes formulář.
Tady je klasický formulář.
protected function createComponentInsertForm() {
$form = new Form;
....
$form->onSuccess[] = array($this, 'insertFormSucceeded');
return $form;
}
Tady metoda pro zpracování dat z něj:
public function insertFormSucceeded(Form $form, $values) {
// ...
$this->getModel()->addArticle($values);
$this->flashMessage('Záznam byl úspěšně vložen.');
if($this->backurl==detail){
$id = $values->id_article;
$this->redirect('Article:detail',$id);
}else{
$this->redirect('Homepage:'); }
}
Na stránce, kde je formulář mám normálně proměnnou definovanou přes parametr URL, ale potřebuji to přenášet dál do metody pro zpracování (function insertFormSucceeded).
Za každou radu budu velmi vděčný, předem díky.
Editoval Dark0ne (20. 3. 2016 22:31)