Nový Quickstart – diskuze
- Panda
- Člen | 569
Konečně plním slib… Nette dostalo pod stromeček nový Quickstart! Prozatím se jedná o prvotní verzi, která navíc byla psána pod tlakem blížícího se deadline, takže prosím omluvte případné překlepy, chybky a další nedodělky.
Zatím pod každou kapitolou chybí aplikace ke stažení, umístím ji tam až po stabilizaci kódu. Také doplním sekce „Co si pamatovat“, které byly tak fajn na QS pro 0.9. Také ještě chybí poslední dvě kapitolky, které se budou zabývat routováním a nasazením aplikace do produkčního prostředí.
QS najdete v dokumentaci: https://doc.nette.org/cs/quickstart
Zdrojové soubory jsou k dispozici na Githubu: https://github.com/…/quick-start
Všechny vás nyní žádám o pomoc s tvorbou. Bylo by dobré, kdyby jste si celý QS prošli a zkusili si podle toho aplikaci napsat. Případné překlepy a podobně buď hlaste, nebo rovnou opravujte. Pokud narazíte na některé nesrovnalosti, nebo vám například bude chybět nějaká zmínka a měla by tam podle Vás být, tak taky hlásit. Pokud si myslíte, že by se něco mělo řešit jinak (já osobně jsem přeci jen poslední dobou Nette moc nesledoval a některé věci mám stále tendenci psát ve stylu starších verzí), tak do diskuze.
Předem všem moc děkuji za pomoc!
25. 2. 2012: QS byl dnes aktualizován. Vizte https://forum.nette.org/…tart-diskuze?p=2.
Editoval Panda (25. 2. 2012 17:21)
- Filip Procházka
- Moderator | 4668
Máme opravy posílat na github, nebo si je tam „synchronizuješ“ sám?
- Tomáš Votruba
- Moderator | 1114
Pár myšlenek, jak to čtenáři usnadnit, tedy nezmiňovat historické verze, které se mohl kdysi taktéž naučit.
https://doc.nette.org/cs/quickstart
- používal bych jednotný (kratší, novější, hežčejší)
zápis:
n:foreach
- stejně tak na odkazy to samé, tedy místo
href="{link Task: $list->id}
bych použil:n:href="Task id => $list->id
(teď nevím, jesli je to ‚id =>‘ potřeba)
Samo to záleží na tobě, co se ti líbí/víc vyhovuje :)
- RiskyNet
- Člen | 20
Trochu na rychlo, ale zkusil jsem vytvořit Úkolníček. Při tom jsem narazil na drobnosti – předpokládám že se často jedná o rozdíly vývojových verzí ale přeci:
Začínáme > Složka app
- v sandboxu chybí soubor Model.php v adresáři models
- config.neon je v adresáři config
Vytvoření databáze a modelu > Nastavení připojení
k databázi
- použita jiná struktura config.neon než je v sandboxu
Vytvoření presenteru > Šablona (1)
- píše se „V šabloně default.latte máme nyní k dispozici proměnnou
$list“ ale v sekci „Spojení s modelem“ je
$this->template->tasks
Tady se možná jedná o mou neznalost/chybu, ale jel jsem podle postupu a začátečníka může zmást. V šabloně:
- $task->created vyvolává error: htmlspecialchars() expects parameter 1 to be string, object given
- $task->created|date:‚j. n. Y.‘ už je ok
Vytvoření presenteru > Šablona (2)
překlep „Ve složce templates vytvoříme podložku Task“
Po dokončení „Navigace“ error:
Nette\MemberAccessException > Cannot write to an undeclared property
TaskPresenter::$taskList
a tady jsem se zasekl a už není čas takže pokračovat budu zítra :)
Ještě drobnost při vytváření TaskPresenter se popisuje:
$this->template->tasks =
$this->taskList->related(‚task‘)->order(‚created‘);
později v laděnce je ale vidět, že řadíš dle id, to možná může být taky matoucí když bych hledal kde podle id řadím.
edit: btw klidně i opravím co vím ale ted už musím fakt letět :)
Editoval RiskyNet (23. 12. 2011 15:06)
- Filip Procházka
- Moderator | 4668
Taky jsem malinko přispěl tuhle a táhle opravičkou :P
Zkuste místo vypisování co je špatně, to jít rovnou opravit. Když to opravíte a bude to pořád špatně, tak vám to milerád smažu, takže se není čeho bát :) :P
Editoval HosipLan (23. 12. 2011 15:57)
- Panda
- Člen | 569
RiskyNet napsal(a):
Ještě drobnost při vytváření TaskPresenter se popisuje:
$this->template->tasks = $this->taskList->related(‚task‘)->order(‚created‘);později v laděnce je ale vidět, že řadíš dle id, to možná může být taky matoucí když bych hledal kde podle id řadím.
Screeny prosím berte trochu s rezervou, aplikaci jsem postupně psal a zpětně jsem dělal některé změny, které jsem pak nepřescreenovával. Toto je jedna z nich.
- Panda
- Člen | 569
RiskyNet napsal(a):
Po dokončení „Navigace“ error:
Nette\MemberAccessException > Cannot write to an undeclared property TaskPresenter::$taskList
Do jakého souboru jsi psal uvedenou actionDefault
? Do QS jsem
doplnil, že se změna týká TaskPresenter
u…
Mimochodem, tutoriál by nyní měl adresářovou strukturou sedět i na aktuální sandbox. Snad jsem na nic nezapomněl…
- Tomáš Votruba
- Moderator | 1114
hrach napsal(a):
Nejsem zastáncem n:maker ve smyslu používat tam, kde jde. Používat, tam, kde to něco zpřehlední. Což se u foreache nejedná určitě, n:href imo taky ne, protože to editory nezvýrazní. (smarty je naopak často podporováno).
Myslím, že způsob inner, o kterém jsem dříve nevěděl, tuto
nepřehlednost řeší.
A zvýrazňování jsem bral jako samozřejmost, protože to tak mám. Je
otázkou, jestli je lepší nepoužívat nic, co můj editor nezvýrazňuje,
nebo si to raději dopsat. :)
- bojovyletoun
- Člen | 667
Taky by to šlo. Tady to chápu jako , a) méně důraznou informaci o tom, že stránka (nebo spíš to nazvat „záznam“) neexistuje, b) třeba (generická) hláška z errorpresenteru by se tady nehodila, tak ji nahradím vlastní.
Jinak návod je pěkný, akorát jediné co mě napadlo, je v části o komponentách upozornit na nutnost psát malé mpísmeno v v šabloně.
Ještě jeden poznatek: stránka se mi načítala přes sekundu, frusrovalo
mě to, tak jsem se pomocí wincachegrind( který se hodí spíš pro rychlou
konkrétní analýzu než kcachegrind) doklikal k PDO::connect, a vzpomněl si
na starý problém, že host:localhost zpomaluje. Tak jsem to
nahradil 127.0.0.1 a jede to OK. Pravá příčina ale byla v chybějícím
řádku 127.0.0.1 localhost
v c:\Windows\System32\drivers\etc
- Filip Procházka
- Moderator | 4668
spidy napsal(a):
Nemělo by se místo
$this->setView('notFound');
používat spíš něco jakothrow new Nette\Application\BadRequestException;
?
V tomhle případě výjimka není použita záměrně, protože nechceme uživatele posílat tam, kde slunce nesvítí, ale chceme mu přesně říct co je špatně. V podstatě je to takový vstřícnější ErrorPresenter.
- Radimorous
- Člen | 30
Pro začátečníky by bylo dobré doplnit do textu, že při editaci confing.neon je třeba dát pozor na mezery a tabulátory. Když tam budou připisovat registraci služby model, tak se u toho dá celkem na dlouho seknout.
- Radimorous
- Člen | 30
Můžu se zeptat, na kdy je přibližně plánováno dokončení Quick Startu? My úplní začátečníci v Nette jistě velmi oceníme jakýkoliv posun, protože aktuálnost tutoriálů je asi největší slabina celého frameworku, když vždycky pár řádků kódu řešíme půl dne…
- Panda
- Člen | 569
Dokončení? V jakém smyslu? Chybí Ti poslední dvě kapitoly? Ty budu dopisovat někdy během následujících 14 dnů. Jádro tutoriálu by ale nyní mělo být hotové a mělo by se podle něj jít v pohodě řídit. Pokud ne, tak prosím sepiš konkrétní místa, která Ti přijdou nedokončená a nejasná a něco s tím uděláme.
Co se aktuálnosti týče, tak to bylo také myšleno na QS? Ten by měl reflektovat poslední nightly buildy, pro jistotu jsem dneska upravil poznámku o revizi, byly tam 2 commity navíc, které QS ale nijak neovlivňovaly.
Předem díky za jakoukoliv zpětnou vazbu!
- Radimorous
- Člen | 30
Panda napsal(a):
Dokončení? V jakém smyslu? Chybí Ti poslední dvě kapitoly? Ty budu dopisovat někdy během následujících 14 dnů. Jádro tutoriálu by ale nyní mělo být hotové a mělo by se podle něj jít v pohodě řídit. Pokud ne, tak prosím sepiš konkrétní místa, která Ti přijdou nedokončená a nejasná a něco s tím uděláme.
Co se aktuálnosti týče, tak to bylo také myšleno na QS? Ten by měl reflektovat poslední nightly buildy, pro jistotu jsem dneska upravil poznámku o revizi, byly tam 2 commity navíc, které QS ale nijak neovlivňovaly.
Předem díky za jakoukoliv zpětnou vazbu!
Zrovna jsem začal s Nette náhodou 25.12, takže jsem byl nejspíš mezi prvními začátečníky, kteří se učili podle nového, díky za to :) Za každou kapitolu by se hodilo dát aktuální zdrojáky, ale není to must, spíše jen nice to have… A těším se na dokončení kapitoly s routováním, zrovna jsem se totiž u toho celkem sekl, když si chci napsat blog bez dibi, tak nevím, jak zprovoznit routování (ale to sem nepatří, dotaz jsem dal v sekci začátečníci). Ještě jednou díky za tvorbu tutoriálů, protože kvalitní tutorialy přispějí k šíření Nette. Pár známých bohužel nemělo nervy na bordel v tutorialech a šlo na Zend, tak snad se to s novým Quick startem obrátí.
- Ot@s
- Backer | 476
Radimorous napsal(a):
… Pár známých bohužel nemělo nervy na bordel v tutorialech a šlo na Zend …
Právě pro „slabinu“ v dokumentaci vznikla kolem Nette taková silná a kvalitní komunita. Kdo „vydržel“, tak tomu většinou propadl a má hlubší znalosti díky nutnosti jít více do hloubky, poprat se s tím sám – prostě vydržet a nevzdát to.
- Panda
- Člen | 569
Radimorous napsal(a):
Za každou kapitolu by se hodilo dát aktuální zdrojáky, ale není to must, spíše jen nice to have…
Určitě budou, na začátek jsem je ale záměrně nedával, protože aktualizovat při každé změně několik archivů by bylo nad síly všech zúčastněných a mít tam neaktuální zdrojáky se mi také nechce.
Momentálně to chce hlavně vyřešit, co se třídou Model
.
Rád bych celou modelovou vrstvu trochu refactoroval, aby se v komponentách a
presenterech neoperovalo přímo s objektem typu
Nette\Database\Table\Selection
, ale nevím přesně, jak
na to.
Řešení zmíněné v tématu o routách (https://forum.nette.org/…uty-bez-dibi#…)
se mi nelíbí trošku v tom, že Nette\Database\Table\Selection
si udržuje sestavený dotaz i po jeho vykonání, takže zděděná třída,
která nadefinuje metody get*
, pak musí být vytvořena jen za
účelem volání té jedné jediné metody. Pokud nad již vytvořeným
objektem zavolám nějaký další get*
, tak se dotaz připojí
k předchozímu a v lepším případě se vrátí špatné výsledky,
v horším SQL error.
Přejmenování takových metod na where*
, aby to „padlo do
věty“, jak navrhoval HosipLan na dnes na nette@conf.netlab.cz, podle mě úplně
nevystihuje podstatu get funkce.
Co myslíte? Jak ideálně trochu poupravit model, abychom se vyhnuli
přímému sestavování dotazu pomocí
Nette\Database\Table\Selection
přímo v presenterech a
komponentách, případně jej alespoň omezili?
- David Grudl
- Nette Core | 8205
Především: díky moc za hromadu odvedené práce na Quick startu! Takový čin zůstane nezapomenut a v budoucnu za něj sklidíš ještě spoustu neoprávněné kritiky :-))
K třídě Model: její existence je poněkud nešťastná, protože málokdo si umí pod slovem model představit cokoliv konkrétního, takže ani netuší, k čemu takové třída slouží. Dříve v sandboxu sloužila jako vstupní a inicializační bod modelu, což je věc, kterou plně nahradilo DI. Bylo by tedy vhodné DI naplno využít i v QS.
Samozřejmě je otázka, jak takové DI lidem podat. Sám s tím ze školení zatím moc zkušeností nemám, ale snažím se k tomu přistupovat stejně jak třeba k MVC, tj. žádné MVC nevysvětlovat, neplést tím zbytečně lidem hlavu, a jít přímo k věci. Nechci, aby lidé používali určité postupy proto, že to někdo říkal na školení, nebo proto, že „tak je to přece správné“, ale aby věděli, že to má konkrétní smysl. Na školeních k DI „přijdu“ až po sérii nešikovným pokusů, kdy se potřebujeme v autorizátoru dostat k databázi.
S tím trošku souvisí i používání Table\Selection
v presenteru a komponentách. Spousta lidí tady na fóru bude hlasitě
namítat proti volání SQL dotazů přímo v kódu presenteru, ale jen
málokdo z nich to bude schopen i obhájit (třeba před Jakubem Vránou).
Chytře navržený kód totiž používá odpovídající míru
abstrakce. U triviálních aplikací může být skutečně pragmatické SQL
v presenteru použít.
Framework se ale spíš využívá pro netriviální aplikace, kde se už
nějaká další vrstva vyloženě hodí. Univerzální vrstvou mezi databází
a vlastním kódem je právě Table\Selection
. V případě
jednodušších aplikací se dá velmi výhodně používat v presenteru a
šablonách. V případě složitějších aplikací v modelu.
Nicméně, samotný QS a značná část aplikací tvořených v Nette bude patřit právě do ranku těch „jednodušších“, proto bych se jeho použití nebál, naopak předvedl všechny výhody. Teprve nakonec mohou být naznačeny metody vhodné pro vyšší level aplikací.
- mrataja
- Člen | 57
Ahoj, upřímné díky za QS. Rád bych se zeptal:
1.) Pokud budu chtít využít více modelů než jen použitý Model.php, budu
je rovněž definovat jako službu v config.neon?
2.) V BasePresenteru jsme vytvořili metodu beforeRender, která tahá data pro navigaci. Pokud ji vytvořím ve startup metodě, chová se to stejně. Nezáleží tedy na tom, jestli je tahám ve startupu nebo v beforeRender?
3.) Při změně stavu tasku (metoda handleMarkDone) bych rád dostal
informaci do snipettu, že se to povedlo/nepovedlo. Přidání
$this->flashMessage(‚msg‘) nepomohlo. Jak na to?
Musí být $this->presenter->flashMessage(‚Změna stavu byla
úspěšná.‘);
4.) Možná by se někomu hodilo jako mě, zvýraznit aktivní menu
<ul n:inner-foreach="$taskLists as $list">
<li {ifCurrent Task: $list->id}class="current"{/ifCurrent}>
<a href="{link Task: $list->id}">{$list->title}</a>
</li>
</ul>
v css doplnit
div.task-lists .current a{
color: #333;
border-bottom-color: #555;
}
Editoval mrataja (27. 12. 2011 20:44)
- Tomáš Votruba
- Moderator | 1114
mrataja napsal(a):
<ul n:inner-foreach="$taskLists as $list"> <li {ifCurrent Task: $list->id}class="current"{/ifCurrent}> <a href="{link Task: $list->id}">{$list->title}</a> </li> </ul>
Lépe:
<ul n:inner-foreach="$taskLists as $list">
<li n:class="item, $presenter->linkCurrent ? current"> <!-- umožňuje další třídy -->
<a href="{link Task: $list->id}">{$list->title}</a>
</li>
</ul>
- Patrik Votoček
- Člen | 2221
Schmutzka napsal(a):
Lépe:
<ul n:inner-foreach="$taskLists as $list"> <li n:class="item, $presenter->linkCurrent ? current"> <!-- umožňuje další třídy --> <a href="{link Task: $list->id}">{$list->title}</a> </li> </ul>
Špatně!
$presenter->linkCurrent
totiž ověřuje aktuálnost
naposledy generovaného linku. A jelikož se zde link generuje až na
dalším řádku bude se tedy ověřovat link z předchozí iterace nikoli
stávající.
Správně je to tedy:
<ul n:inner-foreach="$taskLists as $list">
<li n:class="item, $presenter->isLinkCurrent('Task:', array($list->id)) ? current">
<a href="{link Task: $list->id}">{$list->title}</a>
</li>
</ul>
- bojovyletoun
- Člen | 667
Do handlemarkdone vložit
$this->presenter->flashMessage("Změna stavu byla úspěšná.");
pro potvrzení odškrtnutí.
Dál bych refactrotoval
$this->model->getTasks()->where(array('id' => $taskId))->update(array('done' => 1));
na $task->update(array('done' => 1))
Myslím, že by bylo i vhodné dát do tutoriálu jakési cvičení.
Mohla by to být další kapitola a v ní tyto drobé úkoly – jak ostatně vyplynulo odsud
- zvýraznění akutálního projektu.
(
n:class=islinkcurr...
) - zprávička pro potvrzení odškrnutí tasku
- možnost smazat task
- možnost smazat task, byl li dokončen.
Někde dál by mohlo být řešení. Případně by toto mohlo být jako další kapitola „drobné úpravy“.
Zkusím to napsat a přidat.
Editoval bojovyletoun (28. 12. 2011 19:02)
- Panda
- Člen | 569
bojovyletoun napsal(a):
Zkusím to napsat a přidat.
Je to zajímavý nápad, zatím to ale piš někam bokem. Některé věci, například ty flash zprávičky z komponenty, by měly asi být řešeny přímo v QS. Navíc na některé věci, které se Tobě zdají samozřejmé, začátečník vůbec nepřijde, protože nemá přehled. Cvičení by třeba vyřešil, ale asi by to nebylo moc v duchu Nette. Smyslem QS by mělo být začátečníkovi některé „best practice“ naservírovat rovnou na talíř, aby si na ně zvykl a zbytečně si nekomplikoval život.
Co se dalšího rozšiřování týče, tak mám v hlavně několik myšlenek na další rozšiřující tutoriály. Teď je ale hlavní doladit základní QS, až pak bych se bavil dál.
- Tomáš Votruba
- Moderator | 1114
Patrik Votoček napsal(a):
Pravda, bral jsem to jako položky v menu, přehlédl jsem ta id. Díky za opravu.
- err
- Člen | 77
jako uplny zacatecnik s nette podle tutorialu jedu a mam par poznamek neznaleho, seznamujiciho se cloveka:
– u struktury adresaru prosim dopsat pozadovana opravneni pro /temp a /log . jsou sice popsana dale v textu (po nacteni titulni stranky), ale pokud jsou prava nenastavena, server zahlasi nicnerikajici chybu 500 a nebylo intuitivni presto pokracovat v navodu a narazit na poznamku, ktera prava vysvetluje.
– Vytvoreni DB OK
– Model – zminka o vytvoreni noveho souboru Model.php v adresari model a tridu vlozit do nej. U funkci getTask, getTaskList atd. prosim dopiste, ze jsou to funkce teze tridy.
– Setup OK, authentizace take OK
– Presentery – zde jsem zmateny. Sice je nejdrive ukazan a
HomepagePresenter, ale nasledujici modifikace mi jasne nejsou:
* spojeni s modelem – „Pro pohodlnější přístup si připravíme
v presenteru atribut $model.“
Pokud jsem vlozil dle navodu a upravil funkci renderDefault, server po uprave
default.latte hlasi opet chybu 500
pokud jsem pochopil navod, ma to vypadat takhle:
class HomepagePresenter extends BasePresenter
{
/** @var Model */
private $model;
public function startup()
{
parent::startup();
$this->model = $this->getService('model');
}
public function renderDefault()
{
$this->template->tasks = $this->model->getTasks()
->where(array('done' => false))->order('created ASC');
}
}
No a dal jsem se zatim nedostal. Ted zjistuji jak pustit debug. V logu serveru nic nemam.
Take by nebylo spatne projekt vystavit, cimz by vetsina dotazu odpadla. stacilo by se jen podivat.
Editoval err (30. 12. 2011 16:52)
- Panda
- Člen | 569
Pro vynucení debug módu si v bootstrap.php
uprav řádek s
Debugger::enable
takto:
Debugger::enable(FALSE);
(FALSE
– vývojový režim, TRUE
–
produkční prostředí, neuvedeno – autodetekce podle IP adresy, současné
Nette považuje za vývojové jen localhost
, je také možné zadat
seznam IP adres jako pole)
Od pohledu v uvedeném kódu žádnou chybu nevidím, takže by výstup z laděnky moc pomohl. Díky!
Doplněno 16:57:
err napsal(a):
Take by nebylo spatne projekt vystavit, cimz by vetsina dotazu odpadla. stacilo by se jen podivat.
On vystavený je, viz první příspěvek tématu. Po odladění chyb bude pod každou kapitolou ke stažení aplikace ve stavu, v jakém by měla být na konci dané kapitoly. Tutoriál by ale měl být srozumitelný i bez toho, aby člověk musel koukat do zdrojáků, proto jsem teď záměrně odkaz na github hodil jen sem.
Editoval Panda (30. 12. 2011 16:58)
- 22
- Člen | 1478
Panda napsal(a):
(
FALSE
– vývojový režim,TRUE
– produkční prostředí, neuvedeno – autodetekce podle IP adresy, současné Nette považuje za vývojové jenlocalhost
, je také možné zadat seznam IP adres jako pole)
..nevím, jak jinde, ale poslední dev verze
pole nežere,
akorát string oddělenný čárkami…
- Jan Tvrdík
- Nette guru | 2595
Panda wrote:
Pro vynucení debug módu si v
bootstrap.php
uprav řádek sDebugger::enable
takto:Debugger::enable(FALSE);
Lépe je použít konstantu:
Debugger::enable(Debugger::DEVELOPMENT);
- err
- Člen | 77
Oboji je funkcni v tom smyslu, ze se mi ukaze debug bar. Nicmene to stale hazi chybu 500 a ladenka nevyskakuje. Cache ?. V /log/error.log mam :[2011–12–30 20–21–38] Nette\DI\MissingServiceException: Service ‚model‘ not found. in /muj_web_adresar/libs/Nette/DI/Container.php:159 @ http://muj_web/www/ @@ exception-2011–12–30–17–07–12–70048f45eb99cc80b12dc7a58aa280dc.html
V souboru /app/config/config.neon dle navodu mam:
model: Model( @database )
authenticator: Authenticator( @model::getUsers() )
v /app/models jsem vytvoril Model.php s tridou class Model extends Nette\Object a jejimi funkcemi dle navodu
/app/presenters/HomepagePresenter.php viz. vyse
bootstrap.php :
// Enable Nette Debugger for error visualisation & logging
Debugger::$logDirectory = __DIR__ . ‚/../log‘;
Debugger::$strictMode = TRUE;
Debugger::enable(Debugger::DEVELOPMENT);
Checker mi dava vse OK. Pouzivam Apache / mod_php
- err
- Člen | 77
Takze vse otazka cache. Dekuji za rady. Abych pokracoval v pripominkach, hned bych tento stav zminil :-) pro zacatecnika to neni samostatne resitelne. Take bych se primlouval o pridani zakomentovanych radku pro spusteni debugeru do sandboxu. Tohle je myslim zcela zasadni funkce, ktera by mohla mit vyjimku.
Jeste jednou diky za pomoc, jdu prochazet navod dal. Napisu vysledek.
- Panda
- Člen | 569
err napsal(a):
Takze vse otazka cache. Dekuji za rady. Abych pokracoval v pripominkach, hned bych tento stav zminil :-) pro zacatecnika to neni samostatne resitelne.
Většina začátečníků má server umístěn na localhostu, takže u nich se chyby neprojeví. Přidal jsem ale do QS poznámky, kdyby se s tím někdo setkal.
Jak jsem zmiňoval v mailu, zkusím vymyslet nějaké jednotnější řešení pro detekci prostředí, aby se nemusel Configurator a Debugger nastavovat zvlášť.
Jan Tvrdík: Jinak díky za upozornění na konstanty
Debugger::DEVELOPMENT
a Debugger::PRODUCTION
, když
jsem to psal, tak jsem si vůbec neuvědomil, že tam jsou. :-) V QS
opraveno.
Editoval Panda (30. 12. 2011 21:56)
- err
- Člen | 77
- Dokonceni navodu
- TaskPresenter – zalozeni a napln pochopitelne bez potizi, kvituji odkaz na adresar kam patri
- po manualnim doplneni Projekt A a Projekt B do databaze, link u Projekt A odkazuje na /www/%EF%BB%BF/www/task/default/1 a Projekt B na /www/task/default/2 (to je asi jiz spravne), nicmene zadny z odkazu neni v teto fazi funkcni . Ani u jednoho, ani u default/3 nevyskakuje ladenka, ale objevi se standardni hlaseni apache Not Found – The requested URL /www//www/task/default/1 was not found on this server.
Vyzkousel jsem vsechny zapisy <ul><li n:foreach …
- Panda
- Člen | 569
Poprosil bych o celý kód šablony, první odkaz je divný.
Druhý odkaz nefunguje kvůli tomu, že na serveru nemáš povolený
mod_rewrite
. A pokud máš, tak nejde nastavovat v
.htaccess
, tzn. v konfiguraci Apache je špatně AllowOverride (měl by být nastaven na
All
).
Editoval Panda (30. 12. 2011 23:46)
- err
- Člen | 77
Je to tak. Doplnil jsem do virualu a je to OK. Omlouvam se tedy. pro poradek: doplnil jsem do rootu Virtual serveru RewriteEngine On a do Directory AllowOverride All . Struktura tedy vypada :
<VirtualHost *:80>
…
RewriteEngine On
<Directory />
AllowOverride All
</Directory>
</VirtualHost>
---
Odkaz: /www/%EF%BB%BF Zpusoboval BOM (chyba take na me strane)
---
Editoval err (31. 12. 2011 0:00)
- Jan Tvrdík
- Nette guru | 2595
Následují drobnosti, kterých jsem si všiml při čtení první kapitoly QS.
- podivná formulace „toto ukládání chybových hlášení…“
- podivný termín „data sezení“
- podivný spojení „prostředí Nette“
- místo
document root
použít document root neboDocumentRoot
- podivná formulace „nastaví mechanismus automatického načítání jednotlivých částí Nette až v případě jejich potřeby“
- podivné spojení „Nette tříd“
- podivná formulace „jméno presenteru, který se bude vykonávat“
- err
- Člen | 77
Komponenty
– rozchazi se kod funkce createComponentTaskList() ; V komponentach je pouze:
return new TaskList($this->taskList->related('task')->order('created'));
a zrejme by melo byt tak, jak je predtim
return new TaskList($this->taskList->related('task')->order('done, created'));
Editoval err (31. 12. 2011 16:11)
- err
- Člen | 77
Signaly
- TaskPresenter / Funkce createComponentTaskList() – chybi druhy argument konstruktoru . Chyba nevyvola ladenku, ale server error 500.
Oprava:
protected function createComponentTaskList()
{
return new TaskList($this->taskList->related('task')->order('done, created'), $this->model);
}