Nepřenáší se FlasHMessages
- zdenda204
- Člen | 21
Ahoj,
když si uložím flash zprávu a redirectnu tak se jakoby nepřenese (při
var_dumpu proměnný $flashes je jen array(0){}).
Ať ji uložím kde chci, nefunguje, pouze pokud ji uložím přímo
v BasePresenteru.
HomePagePresenter kde se to pokouším uložit vypadá takto (Podmínkou to
není, zkoušel jsem i mimo).
class HomepagePresenter extends BasePresenter
{
public function startup() {
if(!$this->getUser()->isLoggedIn()){
$this->flashMessage("Musíte být přihlášen", 'warning');
$this->redirect("Sign:in");
}
parent::startup();
}
}
- Mysteria
- Člen | 797
Asi 14 dní zpět pozoruju stejný problém, přestalo to fungovat zničeho nic, žádnou aktualizaci Nette jsem neprováděl nebo tak něco. Každopádně bez redirectu funguje FM v pořádu, po redirectu je sice v URL parametr třeba _fid=04gd a v flashSession mám FM uloženou jako Nette.Application.Flash/04gd, ale proměnná v šabloně $flashes je prázdná. Neměl jsem čas to zkoumat, takže jsem to narychlo fixnul tímhle:
$this->template->flashes = $this->flashSession->flash; // flashMessages temporary fix
Asi by se ještě hodil test na čistým sandboxu, jestli tam mám stejnej problém, ale na to jsem zatím neměl čas.
Apache/2.4.6 (Win32) PHP/5.5.7 Nette Framework 2.2-dev (revision 43f59e2 released on 2013–12–31).
- David Matějka
- Moderator | 6445
neprepisoval si neco primo v nette? zkousel si aktualizovat na novejsi nette? nemas v presenterech nejaky podezrely kod? je divny, jak rikas, ze to funguje jen v BasePresenteru
- Mysteria
- Člen | 797
@matej21: Co se mne týká, tak custom úpravy Nette nemám, podezřelý kód taky ne. Každopádně zejtra to teda vyzkouším na čistým sandboxu, abych potvrdil / vyvrátil, že je chyba někde přímo v projektu a dám vědět.
EDIT: Tak jsem to vyzkoušel rovnou a na čistým 2.2-dev sandboxu to funguje v pořádku, což znamená, že je teda problém někde u mě v projektu a naprosto netuším, kde by to mohlo být.
Editoval Mysteria (2. 1. 2014 0:36)
- zdenda204
- Člen | 21
Jsem na tom úplně stejně jako Mysteria, neupravený Nette, v sandboxu to
funguje a chyba je nejspíš v projektu, ale také netuším kde.
Kdyby se našel tedy někdo a pokusil se najít co to způsobuje, třeba by to
vyřešilo problém nás obou.
- David Matějka
- Moderator | 6445
a mame to :)
smaz/prejmenuj v BasePresenteru
$this->params = $this->context->getParameters();
stejnou clenskou promennou pouziva nette pro parametry v app requestu, tudiz tim prepises parametr pro flash zpravy
btw, na parametry v contextu je lepsi nesahat takhle primo, radeji si konkretni parametry posilej do konkretnich sluzeb (v neonu)
Editoval matej21 (2. 1. 2014 1:18)
- Šaman
- Člen | 2666
Nebylo by dobré přejmenovat parametry, které si Nette samo předává do
presenteru a šablon? Já jsem třeba dřív narážel na obsazenou proměnnou
$user
.
Za mě bych navrhoval pro začátek přidat k těmto parametrům prefix
n
, nebo nette
($nUser
,
$netteUser
). Třeba proto, že mám-li entitní návrh aplikace,
tak user
bude s největší pravděpodobností jedna entita a
pokud nevím, že si Nette tuto proměnnou vytváří samo, tak mám zaděláno
na průšvih.
Pokud někdy dojde k refaktoringu presenterů a komponent a jejich vytváření pomocí DI, tak sice bude možné nastavit si pro tyto vnitřní proměnné vlastní názvy, ale v příkladech (sandboxu), které se budou používat jako ukázkové vytvoření presenteru bych nechal opět názvy proměnných nekolidující s obecnými slovy běžně používanými pro proměnné.
- Šaman
- Člen | 2666
Co se toho týče, tak předpokládám, že to bude jedním ze žhavých témat poslední soboty. V Nette dělám už dlouho, sleduji už spíš zdrojáky, než dokumentaci, ale stejně se na úpravu Nette necítím být oprávněn. Jiná věc je oprava bugu a jiná určovat směr a třeba zavádět nekompatibility.
Na druhou stranu jestli má Nette přestat být one man show, tak podobné úvahy nejsou úplně na místě. Zajímalo by mě, jak to řeší při vývoji velkých opensource projektů. (Ten rozpor jednotná koncepce vs. přidejte si každej co se vám líbí.) Nechcete si někdo, kdo o tom trochu víte, připravit přednášku?