ERR_TOO_MANY_REDIRECTS při $this->redirect(‚this‘);

Newer
Člen | 47
+
0
-

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

redirektujes na stejnou stranku, ktera znovu provede redirect. ceho se snazis dosahnout?

Šaman
Člen | 2633
+
+1
-

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

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)

CZechBoY
Člen | 3608
+
0
-

Vratit odkud?

MajklNajt
Člen | 471
+
0
-

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

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

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)

CZechBoY
Člen | 3608
+
0
-

Co delas za akci? Odeslani formulare? U formulare se to dela v udalosti onSuccess

Newer
Člen | 47
+
0
-

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)

CZechBoY
Člen | 3608
+
0
-

Tak bud udelej 2 akce nebo handle a potom presmeruj zpatky na vypis polozek.

Šaman
Člen | 2633
+
0
-

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čí.