předavání zpráv flashMessage
- vlkodlak
- Člen | 175
zdravím pánové,
mám presenter admina
final class AdminPresenter extends BasePresenter
{
...
...
...
public function actionOut(): void
{
$this->getUser()->logout(true);
$this->flashMessage('Odhlášení bylo úspěšné.');
$this->redirect('Homepage:default');
}
}
který funguje. Na konci při ukončení práce chci jen oznámit, že
uživatel byl odhlášen, ale proste zpráva do layoutu nedojde :-(
zkusil jsem i případně
$this->presenter->flashMessage(...);
- ForestCZE
- Člen | 209
vlkodlak napsal(a):
zdravím pánové,
mám presenter admina
final class AdminPresenter extends BasePresenter { ... ... ... public function actionOut(): void { $this->getUser()->logout(true); $this->flashMessage('Odhlášení bylo úspěšné.'); $this->redirect('Homepage:default'); } }
který funguje. Na konci při ukončení práce chci jen oznámit, že uživatel byl odhlášen, ale proste zpráva do layoutu nedojde :-(
zkusil jsem i případně$this->presenter->flashMessage(...);
Možná hloupá otázka, ale může se stát. Máš v @layout.latte vykreslení těch zpráv?
Nějak takto:
<div n:foreach="$flashes as $flash" n:class="alert, 'alert-' . $flash->type">{$flash->message}</div>
- vlkodlak
- Člen | 175
@ForestCZE to pravě funguje dokonce i ve stejném AdminPresenteru
například oznámení o přihlášení se mi zobrazí
final class AdminPresenter extends BasePresenter
{
...
...
...
public function signInFormSucceeded(Form $form, \stdClass $values): void
{
$this->getUser()->login($values->username, $values->password);
$this->flashMessage('Uživatel přihlášen.');
$this->redirect('Admin:default');
}
...
...
...
}
edit> jako kdyby tím redirektem fronta zpráv byla vymazaná
Editoval vlkodlak (8. 7. 2021 18:45)
- ForestCZE
- Člen | 209
vlkodlak napsal(a):
@ForestCZE to pravě funguje dokonce i ve stejném AdminPresenteru
například oznámení o přihlášení se mi zobrazí
final class AdminPresenter extends BasePresenter { ... ... ... public function signInFormSucceeded(Form $form, \stdClass $values): void { $this->getUser()->login($values->username, $values->password); $this->flashMessage('Uživatel přihlášen.'); $this->redirect('Admin:default'); } ... ... ... }
edit> jako kdyby tím redirektem fronta zpráv byla vymazaná
A když tam ten redirect není, tak se flashmsg vypíše?
- Petr Parolek
- Člen | 455
Viz https://doc.nette.org/…n/components#… . Opakování kodu je nejhorší, co můžeš udělat! Nevoláš obráceně kod – tj. nejprv redirect a pak flash message?
- Marek Bartoš
- Nette Blogger | 1280
Ono těch možných problémů existuje hned několik.
- Pokud máš flashes v komponentě a ne presenteru, tak se může stát to, že template použiješ před připojením komponenty k presenteru – TemplateFactory bez dostupného presenteru neví kde vzít flashes a do template je nenastaví.
- Nemáš nějak upravený router? Jestli se nepřenáší parametr
_fid
, tak není ani jak obnovit flashes po přesměrování - Když si zobrazíš obsah session, zůstává po přesměrování nově
přidaný klíč začínající na
Nette.Application.Flash/
? Může se ti ztrácet aktuální session, pokud je aktivní secure cookie a přesměrovává se z https na http. Stejně tak můžeš o session přijít při problematickém připojení, protože se při přihlášení i odhlášení mění session id a pokud ti nedorazí hlavička s novým id, tak se session smaže.
Osobně bych to asi ani neřešil. Uživatel má vidět z UI že je přihlášený, není třeba mu interface přehlcovat flashes :)
Opakování kodu je nejhorší, co můžeš udělat!
Duplicity jsou úplně to poslední, co má člověk u čistého kódu řešit. Mnohem horší je předčasná abstrakce (deduplikace), která zkomplikuje kód. Tak trochu uber se silnými slovy, díky.
Editoval Marek Bartoš (9. 7. 2021 11:30)
- vlkodlak
- Člen | 175
@PetrParolek a @MarekBartoš kluci, ne, nejedna se o componentu, ale o normální adminpresenter viz výše, který má obsluhovat pozadí webu
@MarekBartoš ano souhlasím, uživatel hned vidi z front endu kde je a co může dělat … teď chci pochopit proč to nezobrazí a co mohu proto udělat, abych to „napravil“ … jedna se o nijak neupravenou verzi sandboxu staženou z githubu přidán jen ten adminpresenter