Kompaktní skeleton Nette
Školení, která pořádám
Doporučený skeleton frameworku Nette je dobře navržen. Jasně odděluje navenek viditelné soubory od aplikace a knihoven a bude fungovat i bez podpory mod_rewrite. Definuje šest základních adresářů:
app/
models/
presenters/
templates/
.htaccess
bootstrap.php
document_root/
images/
.htaccess
index.php
Na můj vkus je ale tato struktura příliš členitá, vyhovuje mi spíše plošší hierarchie. Vytvořil jsem si proto vlastní skeleton:
models/
presenters/
static/
templates/
.htaccess
index.php
Presentery jsou přímo v základním adresáři. Všechny statické soubory (styly, JavaScript i obrázky) jsou v jednom adresáři, který může být snadno přesunut třeba na jinou doménu. Klíčová je podpora mod_rewrite, bez níž by se uživatel mohl dostat i k nepovoleným souborům:
RewriteRule !^(index\.php|favicon\.ico|static/.+)$ index.php [L]
Vše kromě statických souborů se přesměruje na index.php
(soubor robots.txt
generuji také pomocí Nette).
Diskuse
Nevím, jestli je tohle správně. Myslím, že právě stále stejná struktura projektů je jednou ze zásadních výhod frameworku. Nemusím hledat jestli jsou modely v "_include", "models", "php" nebo jinde a hned vim, že je (Zend) mám hledat v "application/models" a když mě v práci vyhodí a přijmou místo mě nového programátora, tak ten sedne a až bude hledat model, tak bude hledat opět v "application/models". Osobně mám za zlé Zendu to, že třeba nedefinuje defaultně složku "modules", protože je to jen další možnost jak tu aplikaci dělat jinak ;) Třeba si to nazvat "sekce" (při bohemiofily) :)Ale je to asi holt konflikt ideologií (podobně jako RobotLoader, který je IMO v 90% případů špatný ale pro 10% schopných programátorů, kteří si umí udržet pořádek, je přínos). Každopádně - cpát presentery přímo do rootu? No fuj.
(psáno bez hlubší znalosti nette)
ToM:
Myslim, ze Zend byl zrovna velmi spatny priklad. Tam co projekt, to jiny skeleton. Jinak modelove tridy, ze jsou v /application/models/? Tak leda u nejakeho maleho projektu.
Tak to již delší dobu není, od ZF 1.8 je jasně definovaná doporučená struktura adresářů (spolu s modulem Zend_Application - viz http://framework.zend.com/manual/en/zend.…-start.html), dále je přítomen modul Zend_Tool s nástrojem pro rychlou a automatickou údržbu aplikace. Zend Framework quickstart obojí používá.
Nazýváš každou třídu v modelu jako Application_Models_NazevTridy či Models_NazevTridy? To je podle mého docela děsné, navíc jdoucí proti všem coding styles, které jsem kdy viděl (ale samozřejmě jsem jich neviděl zase tolik).
Sám raději preferuju rozumné pojmenovaní adresářů, rozumný coding style pro pojmenovávání tříd a proto používám RobotLoader.
Souhlasím, že programátor si musí umět udržet pořádek a pokud to neumí, je to problém. Ale s tímhle nemá RobotLoader vůbec nic společného.
Kde je třeba bootstrap, config.ini, apod.?
Pokud jsou ty složky odstíněny pomocí deny from all, tak by se to dalo :)
Bootstrap je integrován do index.php, config.ini je také v rootu.
manik:
no proto tam je ten Mod_rewrite ;)
Visitor:
Ne úplně to patří sem, ale zrovna jsme s Nette začal a přemýšlím, zda se nějak řeší "škaredá" část URL s "document_root" třeba pro JS nebo CSS. A nebo to je jen pocitový blok mít v kódu něco jako: "/document_root/css/layout.css" místo "/css/layout.css".
Jakub Vrána :
Adresář document_root by měl být namapován přímo na root webu, ostatní adresáře by z webu měly být neviditelné.
Visitor:
Aha...
Jak jednoduché.
To je to co mi na Nette chybí. Není tam vyloženě nějaký rozumný pokec pro začátečníky, ale všude se zatajují "známé" fakta...
A přitom by na všechno stačil jednoduchý příklad :)
Visitor:
Já to mám spíše abych nezakrněl. Mě dneska už živí něco jiného. Ale o školení již delší dobu uvažuji.
optik:
To rozhodně ne, to má být zmíněno v tutoriálu někde na začátku s příklady jak nastavit různé web servery pro použití s frameworkem. Určitě to tam někde bude, ale asi to bude trochu zasuté, člověk si toho pak moc nevšimne.
Visitor:
To je to co jsem právě popisoval. Ta dokumentace není psána k pochopení, ale tak aby vše co tam je napsáno nebyla lež.
"Adresář document_root by měl být přímo dostupný z vašeho webového serveru."
To je i pokud použiju strukturu /htdocs/xxx/neco_dale/document_root/ s tím, že htdocs je ROOT webu.
Co třeba jednoduše napsat, že document_root není konkrétní adresář, ale je to ROOT webu (např.: htdocs, public_html, ...).
Někdo kdo začíná s NETTE (např. já) jsem měl dost co dělat s chápáním jiných věcí než ještě přemýšlet jestli document_root je přesně daný název složky a nebo obecné zástupné pojetí ROOTu webu. Nebo to alespoň v té struktuře vytučni a dej tam komentář.
danik:
document_root je docela napadne podobny Apache direktive DocumentRoot... a proste se asi nejak predpokladalo ze drtiva vetsina PHP programatoru ktery zkousej nejakej framework uz nekdy minimalne na lokalu apache konfigurovala, tak se asi cekalo ze je to trkne :o)
Jakub Kříž:
No tak to teda ani náhodou. Návod k Nette je bída. A opravdu není psanej pro někoho, kdo s ním chce začít. Je psanej pro někoho, kdo s Nette pracuje a už ho vlastně tedy nepotřebuje. Předpokládat, že začátečník s frameworkem "přece všechno zná a všechno mu musí bejt jasný"... hodně naivní myšlenka. Stálo by za to ten návod zlidštit.
Yetty:
Osobně mám také radši ploší strukturu, mám složku modules (obsahuje složky s jednotlivými moduly, které mají vlastní modely a presentery) a templates (složky s jednotlivými skiny, jejich obrázky a css). Případně ještě languages, pokud má být aplikace snadno překladatelná.
Honza Tvrdík:
Nechtěl bys ten předělaný skeleton dát ke stažení?
Kajman:
Není lepší nepřepisovat i index.php? Tipuji, že v rewritelogu bude jedno zbytečné přepsání z index.php na index.php při každém požadavku.
Diskuse je zrušena z důvodu spamu.