Přesměrování na předchozí stránku po akci v presenteru

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

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)

Dark0ne
Člen | 47
+
0
-

Napadlo mě to ukládat jako

$backlink = array();

bohužel pak moc nevím, jak se dotazovat na předchozí prvek.
Pokud někdo řešil i jiným způsobem, velmi mi to pomůže – díky.

Unlink
Člen | 298
+
0
-

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

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)

Unlink
Člen | 298
+
0
-

Možno hľadáš metódu

$this->getParameter('nazov');