Jak ven z WTF stavů? (contruct v BasePresenter)

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

Zdravím, na rovinu řeknu že nette právě pro wtf stavy nemám rád, ale je to dnes základ takže se jej chci naučit a pochopit tak i to, co je na něm tak úžasného. I bez znalosti pár takových věcí je a tak stojí i zbytek za zkoušku (laděnka a latte je super :)). Bohužel dokumentace mi vůbec nepomáhá, zrovna tak jiné zdroje. Jde mi především o pochopoení principu, nejlíp by na to pomohlo API, ale muselo by být trošku rozepsané. Od předchozí verze jsou alespoň částečně vyřešeny modely takže tam je to ok, ale pořád mi nejde do hlavy –

  1. systémový kontejner a s tím související dokumentační chyba kde se vždy řeší použití na nejasném místě, páč znalost použití v controlleru je samozřejmostí. Tudíž jak přistupovat ke knihovnám a jak vytvářet rozumně vlastní.
  2. Pojmenování metod, jak funguje jejich rozdělení, proč je render jiné než component.
  3. jak globálně vypnout automatické hledání view někde v configu (do bootstrapu a dál se podle mě nemá zasahovat)
  4. proč nemám v konstruktoru BasePresenteru, tak jak je v sandboxu, přístup k getContext(), rád bych si zpřístupnil správu přihlašování všade, ale netusím jak na to. Ale hlavně je to divné chování (parent construct volám)
  5. umí někdy česky vysvětlit co je to DI?
  6. dá se nějak vyhnout neon formátu v configu? .. čili co vlastně config generuje, že bych mu to podtrčil nějak jinak
  7. přijde až vyřeším WTF stav č.4

děkuji za každou objasněnou věc i mimo vypsané, nette je opravdu záhada které bohužel chybí dokumentace :( (což je u českého fenoménu kde je vyzdvihována právě česká dokumentace a komunita docela na škodu)

Editoval Ugo (9. 12. 2011 12:45)

Aurielle
Člen | 1281
+
0
-

4. Konstruktor nepřepisuj, nemáš-li k tomu důvod. K nastavení presenteru slouží metoda startup().

Ugo
Člen | 6
+
0
-

Aháá :D velice děkuji za osvícení. Zatím ale i zklamání – bez rozebrání zdrojáku ale asi nezjistim proč v constructu neni kontejner a i samotné pouštění metod mi přijde dost ošklivé, ale asi se tomu nedá vyhnout no, je to i v zendu, stejně jako konvence pojmenování :( Nemám rád když nevím jak něco funguje a zdroják nette je docela dlouhý a kompletně provázaný, takže na to nemam trpělivost. Obecně tahle vlastnost dělá učení čehokoliv těžký

Jan Tvrdík
Nette guru | 2595
+
0
-

Přečetl jsi si dokumentaci?

1. systémový kontejner a s tím související dokumentační chyba kde se vždy řeší použití na nejasném místě, páč znalost použití v controlleru je samozřejmostí. Tudíž jak přistupovat ke knihovnám a jak vytvářet rozumně vlastní.

Nechápu otázku, zkus i přeformulovat. Ideálně ji doplň o konkrétní příklad.

2. Pojmenování metod, jak funguje jejich rozdělení, proč je render jiné než component.

Nechápu otázku, zkus i přeformulovat. Ideálně ji doplň o konkrétní příklad. Možná hledáš Životní cyklus presenteru

3. jak globálně vypnout automatické hledání view někde v configu (do bootstrapu a dál se podle mě nemá zasahovat)

Čemu říkáš automatické hledání view a proč to potřebuješ? Do bootstrapu se zasahovat smí, není to nic zapovězeného.

4. proč nemám v konstruktoru BasePresenteru, tak jak je v sandboxu, přístup k getContext(), rád bych si zpřístupnil správu přihlašování všade, ale netusím jak na to. Ale hlavně je to divné chování (parent construct volám)

Nikdy, nikdy (!) nepřepisuj konstruktor presenteru.

5. umí někdy česky vysvětlit co je to DI?

Co třeba článek o DI?

6. dá se nějak vyhnout neon formátu v configu? .. čili co vlastně config generuje, že bych mu to podtrčil nějak jinak

Nemusíš používat žádný config. Prostě si to nakonfiguruješ v bootstrapu.

je vyzdvihována právě česká dokumentace a komunita docela na škodu

Je vyzdvihována komunita, dokumentaci máme, ale jejího vyzdvihování si nejsem vědom.

Ugo
Člen | 6
+
0
-

No se mnou si teď užijete :D pokusim se být teda konkrétnější.

  1. systémový kontejner – snad už jsem trošku pochopil, těch stránek manuálu je dost a zrovna ty zásadní jsem často přeskočil. Jestli dobře chápu, tak prostě knihovny řeší RobotLoader a následně volání např. $form=new form(). A onen konterjnér obsahuje objekty definované v configu (nebo alternativním způsobem).
  2. to asi byl onen životní cyklus, po vysvětlení startUp a odkazu na něj mi to celkem došlo.. prostě se tomu nevyhnu a metodu blabla() mi aplikace sama z routy nezavolá ;)
  3. pochopeno z životního cyklu, prostě místo renderAction se použije actionAction a následně setView() a je to (viz. 2). takže dík za popich
  4. Wow jakýto vymakaný editor, vidí že mi chybí bod 4 a tak posune 5 a 6 :-) a pak že umělá inteligence neexistuje
  5. myslím že chápu oč jde, ale nechápu ten divný název, proč tomu vůbec nějak říkat když je to normální předání parametrem… prostě zavání to magií kterou v tom taky hledám, ale zdá se že je to jako obvykle jenom bublina s názvem
  6. bootstrap je ošklivé řešení, co když se mezi verzemi změní zavádění FW, do bootstrapu by neměl uživatel lézt a vše co tam je by mělo být právě v configu. Z nějaké stránky manuálu jsme pochopil že config generuje metody v nějaké systémové třídě což moc nahraditelné není a žádný jiný zápis než neon jsem neviděl – možná jsem jen přehlédl, ale to není tka hrozné. přecijen se to napíše jednou.

Děkuji za odkazy a popostrčení, teď se po Xté trápím s formuláři, ale vždy jsem to vyřešil takže si říkám že teď to půjde také

Editoval Ugo (9. 12. 2011 15:08)

Jan Tvrdík
Nette guru | 2595
+
0
-

5. myslím že chápu oč jde, ale nechápu ten divný název, proč tomu vůbec nějak říkat když je to normální předání parametrem… prostě zavání to magií kterou v tom taky hledám, ale zdá se že je to jako obvykle jenom bublina s názvem

Ona taky první věta praví: „Narovinu: Dependency Injection (DI) není nic tajemného nebo nepochopitelného“. Ten název není něco, co by si Nette vymyslelo, ale jedná se o mezinárodně používané označení design patternu v OOP.

6. bootstrap je ošklivé řešení, co když se mezi verzemi změní zavádění FW, do bootstrapu by neměl uživatel lézt a vše co tam je by mělo být právě v configu. Z nějaké stránky manuálu jsme pochopil že config generuje metody v nějaké systémové třídě což moc nahraditelné není a žádný jiný zápis než neon jsem neviděl – možná jsem jen přehlédl, ale to není tka hrozné. přecijen se to napíše jednou.

Ještě jednou: bootstrap.php není součástí Nette (a tedy ani jeho přítomnost není povinná) a proto může a je zcela běžné, že je uživateli editován. config.neon funguje jako pohodlnější cesta, jak upravovat konfiguraci aplikace a stejně jako Latte šablony se překládá kvůli rychlosti do PHP. Někde ve složce temp bys měl najít co z toho, cos napsal, vzniklo.

Filip Procházka
Moderator | 4668
+
0
-

Tak já taky…

1. systémový kontejner – snad už jsem trošku pochopil, těch stránek manuálu je dost a zrovna ty zásadní jsem často přeskočil. Jestli dobře chápu, tak prostě knihovny řeší RobotLoader a následně volání např. $form=new form(). A onen konterjnér obsahuje objekty definované v configu (nebo alternativním způsobem).

V configu nastavíš služby (to je instance třídy, kterou si drží DI Container aby se nevytvářela opakovaně v různých místech aplikace), ty si Nette přečte a vygeneruje z toho potomka Nette\DI\Container. Tohle je všechno kvůli výkonu.

2. to asi byl onen životní cyklus, po vysvětlení startUp a odkazu na něj mi to celkem došlo.. prostě se tomu nevyhnu a metodu blabla() mi aplikace sama z routy nezavolá ;)

A proč by taky měla? To že je to jinak, neznamená, že je to špatně.

3. pochopeno z životního cyklu, prostě místo renderAction se použije actionAction a následně setView() a je to (viz. 2). takže dík za popich

actionAction smrdí základní neznalostí fungování presenterů a odmítání přijmout jakýkoliv jiný způsob fungování, než naučený. Víš jak se takovému přístupu říká? :)

5. myslím že chápu oč jde, ale nechápu ten divný název, proč tomu vůbec nějak říkat když je to normální předání parametrem… prostě zavání to magií kterou v tom taky hledám, ale zdá se že je to jako obvykle jenom bublina s názvem

Co je normální? „Normální“ je to, co dělá většina, ne? Nette je plné magie, prostě to tak je.

6. bootstrap je ošklivé řešení, co když se mezi verzemi změní zavádění FW, do bootstrapu by neměl uživatel lézt a vše co tam je by mělo být právě v configu. Z nějaké stránky manuálu jsme pochopil že config generuje metody v nějaké systémové třídě což moc nahraditelné není a žádný jiný zápis než neon jsem neviděl – možná jsem jen přehlédl, ale to není tka hrozné. přecijen se to napíše jednou.

Proč by neměl? Standardy práce snad definuje framework, né ty. A framework má boostrap, jako „zavaděč aplikace“, kde se nastavuje, což říká jeho název sám o sobě. Config je jeho rozšířením, není „vůbec“ potřeba. Co ti na tom není jasné?

Trošku mě zvedl ze židle tón „já jsem zvyklý to dělat takhle a je to tak správně“, ale pokud si ho příště odpustíš, rád ti poradím s konkrétními problémy.

MartyIX
Člen | 217
+
0
-

Ugo napsal(a):

… Nemám rád když nevím jak něco funguje a zdroják nette je docela dlouhý a kompletně provázaný, takže na to nemam trpělivost. Obecně tahle vlastnost dělá učení čehokoliv těžký

Ja zdrojaky ctu a toho provazani, o kterem asi mluvis, jsem si nevsiml. Zavislostni strom jednotlivych casti Nette pripominaji strom nez uplny graf. Kdybys mel vetsi trpelivost, tak bys cetl zdrojaky o chvili dele a sam bys to poznal.