BasePresenter – $this->link vrací "Component with name '' does not exists

CzeM
Člen | 9
+
0
-

Ahoj,
potýkám se nyní s problémem, který vidím zcela poprvé a nikde jsem nenašel jakýkoliv podobný.

V aplikaci (klidně hned v BasePresenteru a metodě startup) volám pro vytvoření URL adresy na určitý signál. Pokud je signál ve stejném presenteru (například $this->link(‚signOut!‘) vše vypadá v pořádku, nicméně pokud zavolám jiný presenter (například $this->link(‚Auth:signOut!‘), vrací se mi Exception:

Nette\InvalidArgumentException: „Component with name ‚Auth‘ does not exist.“

V aplikaci používám Nittro, nicméně zkoušel jsem například obejít Nittro presenter a dědit přímo z Nette, ale chyba přetrvává.

Protože nelze vytvořit cestu na signál, zkoušel jsem vytvořit cestu na klasickou „action“. Je podivné, že pokud v ní volám po překreslení snippetu (tedy $this->redrawControl()), žádný payload se nevrací a běh presenteru pokračuje, než skončí chybou o neexistující šabloně. Nebo je tohle standartní chování?

Děkuji za jakékoliv rady.

David Matějka
Moderator | 6445
+
0
-

ahoj, vytvaret odkazy na signaly v jinem presenteru nejde. muzes:

  1. signal pro signOut presunout do base presenteru
  2. pouzit hack pres do parametr:
$this->link('Auth:', ['do' => 'signOut'])

e podivné, že pokud v ní volám po překreslení snippetu (tedy $this->redrawControl()), žádný payload se nevrací a běh presenteru pokračuje, než skončí chybou o neexistující šabloně.

tohle je ocekavane, kdyz zavolas redrawControl, tak se pouze snippet oznaci k prekresleni, ale predpoklada se, ze bude prave existovat v prislusne sablone pro tu akci.