Nette PHP framework (2): Štruktúra, začíname s Nette
Štruktúra Nette, ukážky .htaccess, bootstrap.php, config.ini a vytvorenie prvej jednoduchej Hello World! aplikácie v Nette...

Web, či už sa jedná o osobnú stránku, alebo o portál, má svoju štruktúru a hierarchiu. Rovnako tak tomu je aj pri samotných frameworkoch, ktoré sa riadia určitými pravidlami, ktoré dokážu ochrániť beh celej aplikácie. Výnimkou nie je ani Nette, ktoré sa drží práve bezpečnosti aplikácie tak striktne, že odporúča držať všetky scripty frameworku mimo dostupný root webu. Poďme sa teda spolu pozrieť na to, ako by mala vyzerať štruktúra adresárov a ako správne „rozbehnúť“ základnú aplikáciu.
Držte citlivé scripty mimo priestor, ktorý je dostupný z webu
Aj takto by sa to dalo v skratke povedať. Bezpečnosť je zaručená hlavne vtedy, keď nie je možné priamo z prehliadaču pristupovať k súborom aplikácie, ktoré sú nachylné na „nespracovanie“ serverom a dokážu teda odoslať všetky nastavenia. Veľmi náchylný na tento problém je súbor config.ini, ktorý obsahuje väčšinu nastavení ako serverových, tak aj databázových. Odporúčaná štruktúra preto vyzerá nasledovne:

V prípade, že by ste chceli používať administráciu (čo je viac ako pravdepodobné a preto celý seriál budeme riešiť práve modulárnu aplikáciu), Vaša adresárová štruktúra by mala vyzerať takto:

Ako ste si isto všimli, pribudli nám tam 2 adresáre, ktoré obsahujú svoje presentery a templaty:

To nám však náš web vôbec nerozchodí, pretože treba nastaviť súbor config.ini a základný súbor, ktorý riadi routovanie celého webu – bootstrap.php v spolupráci s .htaccess. Správne routovanie zabezpečuje hlavne .htaccess, ktorý vo svojej jednoduchosti vyzerá nasledovne:
.htaccess ukážka:
# nastavenie pre PHP
php_flag magic_quotes_gpc off
php_flag register_globals off
# mod_rewrite
RewriteEngine On
# v prípade, ze je nutne nastavovat (routujete z ineho adresara ako je webroot)
#RewriteBase /
# front controller
# hlavny controller (index.php) a obmedzenie requestov na urcite typy suborov
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
Tento .htaccess nám zabezpečí, že všetky requesty prejdú naším index-om, ktorý v sebe skrýva zadefinované hlavné cesty k adresáru LIBS a k súboru bootstrap.php, ktorý je hlavným spúšťačom celého framework-u. Jeho defaultný obsah:
bootstrap.php ukážka:
<?php
/**
* Nahranie framework-u
*/
require_once dirname(__FILE__) . '/../libs/Nette/loader.php';
/**
* Nacitanie konfiguracie (zo suboru config.ini)
*/
NEnvironment::loadConfig();
/**
* Nastavenie a predpriprava systemu
*/
NDebug::enable(); // zapnutie debug-u { defaultne zistuje, ci ide o dev, alebo ostry }
$application = NEnvironment::getApplication(); // nacitanie aplikacie
$router = $application->getRouter(); // vytvorenie hlavneho routovania
$router[] = new NRoute('index.php', array(
'presenter' => 'Default',
'view' => 'default',
), NRoute::ONE_WAY); // nastavenie hlavnej routy na hlavnu stranku
$router[] = new NRoute('<presenter>/<view>/<id>', array(
'presenter' => 'Default',
'view' => 'default',
'id' => NULL,
)); // nastavenie routy, kde prvy predany parameter urcuje presenter, atd.
/**
* Spustenie!
*/
$application = NEnvironment::getApplication();
$application->run();
Ako ste si už isto všimli v tomto kóde, hneď v úvode sa načítava základná aplikácia, ktorá sa dopytuje na konfiguráciu. Tá je zapísaná jednak v systéme (základné parametre preberá priamo z php) a zo súboru config.ini:
config.ini ukážka:
[common] set.date-timezone = "Europe/Bratislava" set.iconv-internal_encoding = "%encoding%" set.mbstring-internal_encoding = "%encoding%" ; Nastavenia pre produkcne prostredie (ostry server) [production < common] set.include_path = "%appDir%/libs;%modelsDir%/;%presentersDir%/" ; Nastavenia pre developerske prostredie ; prepisujte iba data, ktore su rozdielne od produkcneho prostredia! [development < production]
Ja osobne som sa stretol vždy pri tvorbe webu s nekonečnými prepisovaniami config-ov a ich nastavení v produkčnom prostredí. Tento jednoduchý config vyrieši všetko za Vás a systém sa sám rozhodne, ktoré z nastavení použije. Ak sa Vaše údaje zhodujú ako v produkčnom, tak aj v dev.prostredí, nemusíte meniť nič a stačí Vám vyplniť údaje o produkčnom prostredí.
Základné nastavenia a „Ahoj svet!“ v Nette
„Hello World!“ aplikácia
Nakoľko sme sa rozhodli, že naša aplikácia bude potrebovať aj tzv. backend (administráciu), je potrené aby ste v bootstrap.php vykonali jednoduchú zmenu, ktorá bude rozhodovať o tom, ktorý presenter a ktorý model sa bude načítavať. Výsledok by mal vyzerať nasledovne:
if (function_exists('apache_get_modules') && in_array('mod_rewrite', apache_get_modules())) {
$router[] = new NRoute('index.php', array(
'module' => 'Front',
'presenter' => 'Default',
'action' => 'index'
), NRoute::ONE_WAY);
$router[] = new NRoute('[
<module admin|front>/]<presenter>/<action>/<id>', array(
'module' => 'Front',
'presenter' =>'Default',
'action' => 'index',
'id' => NULL
));
}
else {
$router[] = new NSimpleRouter('Front:Default:index');
}
Táto časť nám – ako ste si už možno všimli, bude rozhodovať o tom, či sa bude načítavať modul Admin, alebo modul Front. O routovaní si však ešte budeme písať v samostatnej kapitole, nakoľko práve toto je časť, ktorá je v diskusiách o nette dosť obsiahla a myslím si, že si zaslúži svoju vlastnú kapitolu.
Spustenie a ups, chyba => chýba ešte niečo...
Áno, keby ste si teraz spustili aplikáciu, asi by ste videli chybu, pretože Váš presenter asi neobsahuje nič, čo by sa vykonalo. Je veľmi dôležité si uvedomiť, že i keď vytvoríte skript, ktorý obsahuje len čistú triedu, sú hľadané základné súbory, ktoré zobrazujú web. Medzi tieto súbory patrí @layout.phtml (vo verzii 2 alpha už hľadané ako .latte) a vzhľadom na volaný presenter – v tomto prípade Default – je hľadaný aj template pre obsah presenteru – default.phtml.
@layout.phtml / @layout.latte – Kostra Vášho webu.
Celý web má – ako asi každý template – svoju kostru, ktorá určuje základné HTML dookola rôznych jednotlivých blokov. V rámci Nette frameworku sú tieto dynamické bloky rozdeľované na bloky , snipety či samostatné controlery. Pre nás osobne je v úvode potrebné vedieť hlavne o blokoch – {block}. Základný layout by teda mohol vypadať nasledovne:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Nette Framework – Tutorial by Zajtra.sk">
<meta name="robots" content="{$robots}" n:ifset="$robots">
<title>Aplikácia NETTE – Zajtra.sk - Tutoriál</title>
<link rel="stylesheet" media="screen,projection,tv" href="{$basePath}/css/screen.css" type="text/css">
<link rel="stylesheet" media="print" href="{$basePath}/css/print.css" type="text/css">
<link rel="shortcut icon" href="{$basePath}/favicon.ico" type="image/x-icon">
</head>
<body>
{foreach $flashes as $flash}
<div class="flash {$flash->type}">
{$flash->message}
</div>
{/foreach}
{block #content}
Tento text sa zobrazí v prípade, že nie je posielaný obsah bloku „content“
{/block}
</body>
</html>
V template @layout.phtml máte možnosť vidieť parametre, ktoré sú posielané defaultne aplikáciou. Ide o parametre $robots, $basePath, $baseUri a $flashes. Základné premenné asi vysvetlovať nemusím, pretože každému asi príde na um, čo bude obsahovať $robots, či $basePath. Zaujímavé je však použitie premennej $flashes, ktorá v sebe ukrýva všetky chybové či iné „hlášky“, ktoré sú ukladané do session a zobrazované v prípadoch, kedy potrebujeme zobraziť tzv. flash správu. Ďalej ste si mohli všimnúť, že sa v template volá {block #content} …{/block}. Môže byť nahradený aj volaním {include #content}, ktorá zabezpečuje vloženie obsahu, ktorý je posielaný z templatu presenteru. V našom prípade je obsah daného bloku nahradený obsahom templatu default.phtml, ktorý vyzerá nasledovne:
{block content}
<p> Ahoj svet! </p>
Dôvod, prečo je v @layout.phtml volaný block pomocou „mriežky“, znamená to, že sa systém pokúsi nájsť „pomenovaný“ blok – v tomto prípade sa pokúsi nájsť blok, ktorý sa volá „content“. Pri použití funkcie include môžete vložiť akúkoľvek inú šablónu – či už za pomoci relatívnej či absolútnej cesty k súboru .phtml.
Záverom
Vysvetlovať systém šablón a ich uľahčovania – tzv. helpery, je ďalšou kapitolou nášho seriálu. V nej si vysvetlíme, prečo používať {block} … {/block} a ako správne písať link-y.
Programátor, webdesigner a webdeveloper niekoľkých webových projektov. Má za sebou prácu v reklamnej agentúre, médiách a na rôznych pozíciách v oblasti IT.
12 komentárov k článku:
Komentovať môžu iba prihlásení
Zaregistruj sa cez bezplatnú registráciu alebo použi login cez Facebook (FB Connect)
Prihlás sa tu, ak už máš profil na Zajtra.sk:
Zdravim, musim podakovat autorovi, velmi pekne to napisal. Paci sa mi styl pisania ze sa nezaoberas len tym ako spravit app ale skor tym ako to priblizne funguje. Velka vdaka a ti co tu frflu ze to ma pisat inak :) tak nech si spravia vlastny serial.
Inkognito: nič neumrelo, len som sa musel venovať aj práci :) ale vo finále, predpokladám, že čoskoro prídu ďalšie časti :)
@Igor: aby som bol úprimný, keď som ja vytváral tieto "rapid apps" ako si to ty nazval, tak či tak som 90% kodu zmazal, pretože tie "demo" ukážky z modulárnej app mi tak či onak extrémne nepomohli... môžem sa o nich síce v článku vyjadriť, ale tak či onak, keď niekto začína vytvárať app, tak ju potrebuje postaviť na "čistom" základe a nie na niečom, čo musí "premazávať", aby mal čistú štruktúru... alebo sa mýlim?
Srigi, trošku sis teď nadběhl - Co takhle vlastní seriál nebo další screencast? :-)
@frantisek: Suhlasim, je dobre citatelom odkryvat vedomosti "od spodu". Ale napr. pri seriali o web frameworku beziacom v PHP na Apache, by som sa ja osobne nezatazoval naozaj drobnostami ako je mod_rewrite alebo rucne vytvaranie struktury.
Nette bolo vytvorene pre rychle budovanie webappz. Myslim si, ze by bolo fajn keby si prave tento "rapid development" citatelom ukazal formou "toto takto rozzipujte, tu prepiste toto a mate Hello World".
Ale je to len taky moj hint/povzdych (povzdych ako by som to kcel mat v seriali ja - je to tvoj serial, nebudem uz frflat na to ako ho pises).
:)
@igor: Články píšem tak, aby ich mohli ľudia (aj začiatočníci) pochopiť. Ja som sa postavil pred nette od piky a musel som sa všetko učiť sám štýlom pokus-omyl, pretože dokumentácia je, aká je. Mojou snahou je, priblížiť všetky úskalia a tie sú, podľa mňa, už aj pri samotnom "úvode", kde si musí človek vybrať to, či chce ísť na 0.9.x (Stable), alebo chce ísť do "2.0 alphy".
Určite sa však budem v článku venovať práve využívaniu modulov, pretože o tom je v podstate v dnešnej dobe každý web, pretože má svoj front a aj svoj backend...
Ad 2) "from scratch"... videl si niekedy knihu o PHP, ktorá by bola písaná v štýle, že rozoberajú rovno novinky a kašlú na "pozadie" vzniku scriptovacieho jazyku, jeho štandardy a pod? Asi nie, však? Či už ide napr. o knihu o PHP 4, 5, alebo novej 6-tky, všade som vždy našiel tú veľavravnú kapitolu s názvom "Hello world" :)
Ahoj, je fajn,ze detailne popisujes adresarovu strukturu alebo .htaccess. Lepsie by vsak bolo, keby si citatelom ukazal ako z distribucneho archivu rozbalit example "modules-usage" a pripravil ich na pripadne problemy. Pisat Nette appku "from scratch" je nesystemove, nikto to takto nerobi.
Ale drzim palce do dalsich dielov.
Novinky
9 hod.
Oracle a Dell se spojují. Je to i pomsta HP
Novým významným partnerem Oraclu pro x86 servery se nečekaně stal Dell. Larry Ellison v tom vidí jasnou strategii a roli jistě sehrály i dřívější velké spory s HP.
14 hod.
Saudská Arábia zablokovala Viber a pripravuje zákaz pre WhatsApp a Skype
Zablokovanie je podmienené nesplnení požiadaviek, ktoré vyslovil miestny telekomunikačný úrad. Štát vďaka týmto aplikáciám prichádza o finančné prostriedky, ktoré by inak získal z medzinárodných hovorov a SMS správ.
14 hod.
Microsoft poskytuje USA informácie o chybách pred ich opravením
Spoločnosť Microsoft poskytuje americkým tajným službám informácie o bezpečnostných chybách v jej softvéri skôr, ako chyby opraví a teda väčšinou skôr ako o nich verejne informuje.
14 hod.
Microsoft údajně platí vývojářům více než sto tisíc dolarů za aplikace
Microsoft pomalu dohání konkurenční platformy a vyplňuje mezery v nabídce aplikací. Podle serveru Bloomberg Businessweek za to společnost vděčí i finanční podpoře vývojářským společnostem.
1 dňom
Překvapivě jednoduché: brýle Glass rozebrané do posledního šroubku
Blogerka Star Simpson rozebrala Google Glass, aby zjistila, co je uvnitř, o jak složité a modifikovatelné zařízení se jedná, případně jestli se uvnitř skrývá hardwarové překvapení.
Staršie novinky »TOP dlhšie
- 01 3 jednoduché kroky ako spraviť responzibilný dizajn webu (4374x)
- 02 Prečo sa chcem naučiť programovať web stránky? (3828x)
- 03 PayPerPost.sk - zarábajte s webom na článkoch (3771x)
- 04 5 užitočných jQuery tipov (3203x)
- 05 Súťaž o návrh Loga (2838x)
- Aj ty môžeš byť najčítanejší. Napíš článok »
TOP tento mesiac
- 01 HTML WebSocket - chat v node.js za 5 minút (1790x)
- 02 Prečo potrebuje programátor psa (1243x)
- 03 Aplikácie na Facebook-u pre obchoďákov (1051x)
- 04 Ingnite Bratislava vol. 3 (752x)
- 05 Jelly Meeting #20 s Marcelou Liptajovou: Ty ako nová značka na trhu (81x)
- Aj ty môžeš byť najčítanejší. Napíš článok »
Nové články:
- 10.Nový 13,3” tablet pro Váš domov - Point Of View Mobii 1325
jún - 6.Prečo potrebuje programátor psa
jún - 5.ZALMAN FX100 – pasivní chlazení CPU ve tvaru kostky
jún - 1.Aplikácie na Facebook-u pre obchoďákov
jún - 31.Jelly Meeting #20 s Marcelou Liptajovou: Ty ako nová značka na trhu
máj - Viac »
- Aj ty môžeš byť najčítanejší. Napíš článok »
Pekné veci
Pekné veci
Pekné veci
Pekné veci
Posledné komentáre
- su jednoduche, pekne, tak ako šikovný dizajner vie nadizajnovať pekný web, takisto vie š...
- http://www.ambrowse.com/kontakt.php lol, fakt doveryhodna stranka .. ako mi uz pomoze...
- Otazka, ako to niekto robi tak sialene perfektne? Ak sa o design aspon trochu zaujimas m...
- nie som dizajner, rozpravam sa ale s dizajnermi, rozpravam sa s kodermi, obom rozumiem c...
- hmmmm, ok...este niekto?
Kritika
Vieš ako robiť veci lepšie? Pomôž našim odvážnejším členom a skritizuj im projekty!
Reklama
Slovenská IT komunita
Seriály zo Zajtra.sk
· Ako písať blog
· Ako sa stať PHP ninja s Yii Frameworkom
· Aplikácie pre Facebook
· CSS triky
· iOS vývojára príhody a skúsenosti
· Modelovanie webového sídla
· Nauč sa CodeIgniter [HD]
· Nauč sa jQuery [HD]
· Nette PHP framework
· OOP v Javascripte
· Slovenskí iOS developeri
· Yablkov TurboTip [HD]




















neni to samostacne na pochopenie, ale po precitani nejakej dokumentacii k tomu a trial and error to i vdaka tomuto tutorialu celkom dobre slo