Jak předat parametr při redirectu mezi presentery?

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

Mám presenter Default, kde v metodě renderDefault() přesměrovávám na presenter Common.

<?php
$this->redirect('Common:customers');
?>

V CommonPresenter bych ale potřeboval vědět, ze kterého presenteru jsem přišel (abych se tam po nějakám zpracování mohl zase vrátit).

<?php
public function renderCustomers() {
    $originalPresenter = ???
}
?>

Jak na to?

lucass
Člen | 89
+
0
-

Zdar,

buď použij Environment::getHttpRequest()->getReferer() a rozparsuj si query, kde máš presenter i action, nebo mrkni na Application::storeRequest() a Application::restoreRequest(), viz https://forum.nette.org/…o-zalogovani

Ondřej Mirtes
Člen | 1536
+
0
-

V CommonPresenter si definuj persistentní parametr $backlink a redirect uveď ve tvaru:

$this->redirect('Common:customers', array('backlink' => $this->application->storeRequest()));

Když se pak budeš chtít vrátit (nejspíš v odesílací metodě formuláře), tak uvedeš:

$this->application->restoreRequest($this->backlink);
$this->redirect('Default:'); //pro případ, že se restoreRequest nepovede

Editoval Ondřej Mirtes (14. 12. 2009 12:23)

Miloš Němec
Člen | 7
+
0
-

Díky za rady. Na Referer se bohužel nedá spolehnout a přes (re)storeRequest zase nedostanu pouze presenter. Nakonec jsem použil

<?php
$this->redirect('Common:customers', array('originalPresenter' =>'Default'));
?>

a

<?php
$originalPresenter = $this->getParam('originalPresenter');
?>