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

Jakub Vrána, Dobře míněné rady, 9.9.2009, diskuse: 23 (nové: 0)

Diskuse

Tomáš Fejfar:

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.

optik:

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

ikona David Grudl:

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.

ikona Ondřej Mirtes:

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

ikona Jakub Vrána OpenID:

Bootstrap je integrován do index.php, config.ini je také v rootu.

ikona Ondřej Mirtes:

A co www.example.com/config.ini? :)

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

ikona Jakub Vrána OpenID:

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

ikona Jakub Vrána OpenID:

Příkladů je několik, ale to, že document_root má být DocumentRoot, by asi člověka mělo napadnout samotného.

Doporučuji zajít na školení http://php.vrana.cz/ohlas-na-skoleni-nette.php. Pokud chceš v Nette něco dělat, tak se investice rychle vrátí.

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.

ikona David Grudl:

Jako třeba hned v sekci Začínáme - Adresářová struktura, druhá věta http://nettephp.com/cs/quick-start-2 :-))

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í?

ikona Jakub Vrána OpenID:

Dal jsem to na http://php.vrana.cz/data/nette-skeleton.zip.

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.

ikona Jakub Vrána OpenID:

To by asi šlo.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.