Nette negeneruje signál pro handle

d@rkWolf
Člen | 165
+
0
-

Zdravím, nenapadá někoho důvod, proč mi Nette nevygeneruje signál?

Mám presenter dědící z Base a Nette Presenteru.

Tam jsem si vytvořil handle na odhlášení:

    public function handleLogout(): void
    {
        $this->flashMessage('Test.');
        $this->getUser()->logout(true);
        $this->redirect('Homepage:default');
    }

A do default latte šablony toho presenteru dal:

<a n:href="logout!">Log out</a>

V presenteru jinak nic není, je tam použitá Trait podle:
https://github.com/…ggedUser.php
construktor předávající repozitář z kterého se tahá text do stránky, action metoda, co vyhledá správný obsah a render co to dá do template.

Chci jen, aby to odhlásilo uživatele a přesměrovalo na Homepage, message je tam na zkoušku. Po spuštění se nestane nic, stránka se vykreslí, odkaz také, v odkazu je ovšem pouze domana/adresa-stranky, ?do=logout či jak má vypadat ten singál, chybí. Pro jistotu jsem zkoušel měnit velká/malá písmena, ale efekt to nemělo.

Vůbec mě nenapadá, co by to mohlo způsobovat? Logout vyřeším přesměrováním na zbytečnou logout stránku, ale handle budu potřebovat i na jiné funkce.

Kamil Valenta
Člen | 762
+
0
-

Udělej si z handleLogout() actionLogout(), která bude zakončena redirectem.

d@rkWolf
Člen | 165
+
0
-

@KamilValenta Jakto? Přece přes „logout!“ se volají handle ne?

Abych vyvoval v Presenteru „MyAccount“ akci action:logout musím mít odkaz na logout ne? a odkaz na logout udělám jedině, když budu mít v routovací tabulce stránku, co má presenter MyAccount a akci logout místo default, což je ta výchozí v které mám ten odkaz. A bez zbytečné logout stránky jsem se právě chtěl obejít.

jeremy
Člen | 50
+
+1
-

@d@rkWolf

Ja mam presenter Sign a potom 3 akce: in, up, out. Stranka navic jako Sign:out, ktera slouzi jenom jako odhlaseni uzivatele mi neprijde jako spatny reseni. Taky jsem to pred tim chtel jako signal, ale na Error404 se nedaji pouzivat signaly, takze kdyby uzivatel sel na 404 stranku a pak se zkusil odhlasit primo z ni, tak by to nefungovalo. Mit specifickou Presenter:action je v tomto pripade lepsi, alespon z meho pohledu,

Marek Znojil
Člen | 77
+
0
-

jeremy napsal(a):

@d@rkWolf

ale na Error404 se nedaji pouzivat signaly

Pokud je routovatelný, tak ano, viz:
https://forum.nette.org/…l-komponenty#…

Kamil Valenta
Člen | 762
+
0
-

d@rkWolf napsal(a):

@KamilValenta Jakto? Přece přes „logout!“ se volají handle ne?

To sice ano, ale u děděných handlů link vykopne exceptionu InvalidLink (min. ještě ve 2.4).

Abych vyvoval v Presenteru „MyAccount“ akci action:logout musím mít odkaz na logout ne?

Aha, už rozumím. Ano, musel bys to mít routovatelné v každém. My to také řešíme samostatným presenterem
ve stylu Sign:logout a actiona je to proto, aby se na ni dalo odkázat z jiných presenterů.

d@rkWolf
Člen | 165
+
0
-

@jeremy to mi asi netrápí, protože to logout tlačítko mám stejně jen uvnitř přihlášených stránek, na 404 nikde nebude. Právě, že já každou takovou in, up, out musím zadat jako stránku do DB, včetně případných 1,2–10 dalších jazykových verzí…proto se snažím zbytečným stránkám vyhnout. Když to zadám v Sign Presenteru, nejde to nijak zavolat, protože router hledá jen v routovací tabulce.

@KamilValenta ale mě to žádný exception nevyhazuje – prostě to vůbec nic neudělá, ani to nedosadí akci, nic, jak kdyby to tam nebylo

Mám podobnou věc v jednom starším projektu, kde je plovoucí hlavička s rozbalovacím přihlašovacím formulářem, který se mění na odkaz s handle na odhlášení + přesměrování na homepage přesně stejně, jako to, co jsem chtěl udělat teď a tam to funguje v pořádku – jen je to pravěké Nette a je tam ten přihlašovací blok celý formou samostatné componenty, která vykresluje dropdown a v něm pole na přihlášení nebo odkaz na odhlášení, podle stavu přihlášení, včetně toho handle je vše v componentě dědící z control.