ERR_TOO_MANY_REDIRECTS při $this->redirect(‚this‘);
- Newer
- Člen | 47
Ahoj,
mám takovou trabli, dělá mi to snad u všech projektů, co jsem v Nette dělal, tak je to asi chyba, kterou neustále opakuju ale nevím kde jí hledat..
v současnosti řeším
<?php
public function ActionBla(){
.....
$this->redirect('this');
$this->presenter->redirect('this');
}
?>
obě varianty vždy a všude vrátí ERR_TOO_MANY_REDIRECTS
Poradíte mi někdo kde hledat chybu? (evidentně je mezi klávesnicí a
monitorem) protože se mi opakuje ve všech projektech a teď mně nenapadá jak
se tomu vyhnout :-)
Editoval Newer (3. 6. 2020 17:01)
- David Matějka
- Moderator | 6445
redirektujes na stejnou stranku, ktera znovu provede redirect. ceho se snazis dosahnout?
- Šaman
- Člen | 2667
redirect('this');
můžeš dělat v handlerech. Přesměruje
znovu na stejnou stránku, ale nikoliv znovu na stejný signál (ten je určen
až query parametry). Cílem toho je právě přesměrovat na samostatnou
stránku a odstranit z adresy ty parametry signálu, aby se třeba po
stisknutí F5
signál neprovedl znovu (např. opakované smazání
položky podle ID, což by vyhodilo chybu).
Takže právě třeba po smazání položky se tohle dělá: máš stránku se
seznamem položek, u každé odkaz na smazání (handleDelete
) a
na konci toho handleru se provede redirect('this');
abys byl zase
na seznamu s čistou adresou.
U akce (nebo render metody) tohle dělat nemůžeš, protože přesměruješ
zase na stejnou actionBla
, která během svého zpracování zase
přesměruje na actionBla
… pořád dokola. Musíš redirectovat
někam jinam.
Editoval Šaman (3. 6. 2020 17:29)
- Newer
- Člen | 47
mhmmm, takže jsem si to zacyklil…
jak tedy řešit, pokud stejnou akci používám v různých šablonách jednoho presenteru a po jejím provedení bych se chtěl vrátit do té šablony, odkud jsem ji volal? :)))
Nepřijde mi jako správné řešení tu akci jen přejmenovat a měnit jen redirect.
EDIT:
pročetl jsem to ještě jednou, a já to teda zpracovávám jako akci což je ve špatné části životního cyklu pressenteru? Tedy měl bych z toho udělat handle → musím změnit i router?
Editoval Newer (3. 6. 2020 19:26)
- MajklNajt
- Člen | 502
Newer napsal(a):
jak tedy řešit, pokud stejnou akci používám v různých šablonách jednoho presenteru a po jejím provedení bych se chtěl vrátit do té šablony, odkud jsem ji volal? :)))
v prvom si treba uvedomiť, že $this->redirect("this")
ťa
nikty nevrátiť na šablónu, z ktorej si to volal, môžeš si napríklad
predať v parametri nejaký backlink
, na ktorý potom
presmeruješ
Editoval MajklNajt (3. 6. 2020 19:37)
- Newer
- Člen | 47
MajklNajt napsal(a):
Newer napsal(a):
jak tedy řešit, pokud stejnou akci používám v různých šablonách jednoho presenteru a po jejím provedení bych se chtěl vrátit do té šablony, odkud jsem ji volal? :)))
v prvom si treba uvedomiť, že
$this->redirect("this")
ťa nikty nevrátiť na šablónu, z ktorej si to volal, môžeš si napríklad predať v parametri nejakýbacklink
, na ktorý potom presmeruješ
:-) okok, takže jsem měl milné představy o $this->redirect(„this“)… to vše vysvětluje. Díky. Udělám to tím parametrem …
Editoval Newer (3. 6. 2020 19:46)
- Newer
- Člen | 47
btw, ještě blbější dotaz asi …
ale předělal jsem action na handle .....´
<?php
public function HandleBla(){
.....
$this->redirect('this');
$this->presenter->redirect('this');
}
?>
musel jsem zmenit ( v n href jsou i nějaké parametry)
n:href=„bla“
na
n:href=„bla!“
a
<?php
$this->redirect(„this“);
?>
už mne vrací do šablony odkud jsem handle volal, problém je, že se provede jen ten redirect..... a obsah ne (změna stavu položky v DB)
Editoval Newer (3. 6. 2020 19:51)
- Newer
- Člen | 47
CZechBoY napsal(a):
Co delas za akci? Odeslani formulare? U formulare se to dela v udalosti onSuccess
mam akci, kde u položky měním stav, který předávám v parametru té akci. To dělá sám uživatel (ten který si tu položku vytvořil) …
no a dodělával jsem si teď administraci, kde vypisuji všechny položky, všech uživatelů a chtěl jsem Adminovi dopřát možnost měnit stav každé z těch položek.
no tím pádem 2 šablony
a chci se vrátit vždy do šablony odkud jsem akci volal, předat si to
parametrem mně napadlo, ale nechtěl jsem přepisovat ty předchozí šablony
(upravovat odkazy), proto jsem zkusil to redirect this…
EDIT: nejlehčí bude asi udělat ten parametr pro redirect nepovinný… pak si ho předám jen v té poslední šabloně pro ADMINA, a ošetřím v akci kam dělat redirect…
Editoval Newer (3. 6. 2020 20:39)
- Šaman
- Člen | 2667
Jestli tím myslíš to, že dejme tomu na editaci položky se můžeš dostat ze seznamu všech položek a nebo z detailu položky a po skončení editace se chceš vrátit odkud jsi přišel, tak to můžeš předávat tím parametrem.
A jak jsi psal, že se provede jen redirect, ale už ne změna stavu v db – to je divné. Zkoušel jsi to nějak ladit? Posíláš do db správné hodnoty, odeslal se sql dotaz? A samozřejmě děláš redirect až po zpracování těch hodnot? Redirect to ukončí.