Nefunguje mi přesměrování na předchozí stránku
- crassus
- Backer | 78
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]);
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
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
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ěď.