Nefunguje mi přesměrování na předchozí stránku

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

Dobrý den,
chtěl bych prosím poradit s přesměrováním na předchozí stránku pomocí metod store a restoreRequest().

V BasePresenteru mám:

		public function handleGoToGate()
{
        $this->redirect('Gate:default', array('backlink' => $this->storeRequest()));
}

A v GatePresenteru mám:

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

		public function handleTest()
{
        $this->restoreRequest($this->backlink);
        $this->redirect("Place:");
}

GatePresenter slouží pro přihlašování uživatelů. Zkouším v něm, zatím jenom signálem, zavolat metodu retoreRequest(), abych dostal uživatele zpátky na stránku před přihlášením. Bohužel se mi nedaří přesměrovat zpátky na presenter, kde byla zavolána metoda handleGoToGate().

Do GET parametru se mi backlink uloží, ale po zavolání handleTest() se stránka bohužel jenom refreshne a parametr backlink se změní na jiný hash.

V metodě handleTest() jsem si vydumpoval session:

		$session = $this->getSession('Nette.Application/requests');
		\Tracy\Debugger::dump($session[$this->backlink]);

http://jpeg.cz/…30/pWxtY.png

Ta vypadá správně, protože v ní je uloženo: name = Scene a id_scene = 1. Přesně na ScenePresenter s id_scene = 1 to má redirectnout, ale nestane se tak.

Nevíte někdo prosím co s tím?

Editoval crassus (30. 10. 2016 16:59)

ODIS
Člen | 33
+
0
-

Ahoj,

kód máš v pohodě, ale logiku věci nikoliv. V GatePresenteru se ti při obnovení requestu zavolá opět handleGoToGate(), protože obnovený request v sobě má mimo jiné parametr „do“.

Podívej se do laděnky na provedené requesty.

U kontroly přihlášení uživatele má tato logika smysl, protože se může pokračovat v kroku, ve kterém skončil. Ale v tvém případě vytváříš smyčku.

crassus
Backer | 78
+
+1
-

ODIS napsal(a):

Ahoj,

kód máš v pohodě, ale logiku věci nikoliv. V GatePresenteru se ti při obnovení requestu zavolá opět handleGoToGate(), protože obnovený request v sobě má mimo jiné parametr „do“.

Podívej se do laděnky na provedené requesty.

U kontroly přihlášení uživatele má tato logika smysl, protože se může pokračovat v kroku, ve kterém skončil. Ale v tvém případě vytváříš smyčku.

Ano přesně tak :)

S tímhle to funguje už tak, jak to fungovat má.

		public function handleGoToGate()
{
        $backlinkKey = $this->storeRequest();
        $session = $this->getSession('Nette.Application/requests');
        $sessionData = $session[$backlinkKey][1];
        $parameters = $sessionData->getParameters();
        $parameters['do'] = NULL;
        $sessionData->setParameters($parameters);
        $this->redirect('Gate:default', ['backlink' => $backlinkKey]);
}

Děkuji moc za odpověď.