Nepřenáší se FlasHMessages

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
zdenda204
Člen | 21
+
0
-

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();
    }
}
Majkl578
Moderator | 1364
+
0
-

Je po přesměrování v URL parametr _fid? Máš funkční sessions?

zdenda204
Člen | 21
+
0
-

Ano, oboje potvrzuji.
_fid se do URL vkládá a sessiony jsou funkční (Alespoň ze strany Apache, v ostatních skriptech fungují a Requirements Checker si též nestěžoval).
Nefunguje to na localu, hostingu ani na kamarádově localu.

Editoval zdenda204 (1. 1. 2014 22:48)

David Matějka
Moderator | 6445
+
0
-

verze nette?

zdenda204
Člen | 21
+
0
-

Jedná se o Nette Framework 2.0.13 (revision 695f643 released on 2013–11–05).
Ze začátku fungovaly, ale pak jakoby nic přestaly fungovat.

Jan Tvrdík
Nette guru | 2595
+
0
-

Smaž cookies.

Mysteria
Člen | 797
+
0
-

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).

zdenda204
Člen | 21
+
0
-

Nepomohlo smazání cookies, ani Mystyho řešení.
Možná by nebylo špatný někomu dát přístup k těm souborům aby to prohlídl přímo.

Editoval zdenda204 (1. 1. 2014 23:32)

David Matějka
Moderator | 6445
+
0
-

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
+
0
-

@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
+
0
-

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.

Projekt v raru

David Matějka
Moderator | 6445
+
0
-

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)

zdenda204
Člen | 21
+
0
-

Děkuji, již to funguje, snad to půjde i Mysteriovi.

Šaman
Člen | 2666
+
0
-

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é.

enumag
Člen | 2118
+
0
-

@Šaman: Některé proměnné jsou prefixované podtržítkem. Do budoucna by asi měly být všechny, jen někdo musí poslat PR.

Šaman
Člen | 2666
+
0
-

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?

Mysteria
Člen | 797
+
0
-

Tak problém u mě nakonec taky vyřešen. Konkrétně jsem v metodě injectContainer(\Nette\DI\Container $c) jsem rovnou přidával proměnné z neonu do šablony a to způsobovalo tenhle problém. Po odstranění všechno funguje jak má. :) Díky za popostrčení.