Nette negeneruje signál pro handle
- d@rkWolf
- Člen | 165
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
Udělej si z handleLogout() actionLogout(), která bude zakončena redirectem.
- d@rkWolf
- Člen | 165
@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
@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
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
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
@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.