1. diel - Úvod do Nette frameworku pre PHP
Vitajte u prvej lekcie kurzu tvorby webových aplikácií v PHP frameworku Nette. Nette je kompletný framework pre PHP, ktorý výrazne zjednodušuje tvorbu webových aplikácií. Jeho autorom je český vývojár David Grudl. Framework je kvalitne objektovo navrhnutý a v Čechách veľmi rozšírený. Fungujú na ňom veľké projekty ako napr. GE Money, Slevomat, ČSFD a tiež obrovská kopa menších webov a eshopov. Keď ho budete vedieť, tak nejakú prácu vždy nájdete. V dnešnom tutoriále si vysvetlíme prečo by sme mali používať PHP frameworky a povieme si ako Nette funguje.
Tento seriál je písaný pre aktuálny Nette, teda verziu 2.4.x
Prečo používať framework
Framework je ucelený súbor do seba pasujú knižníc. V PHP sa bez kvalitných knižníc u vážnejších projektov nezaobídete. Sú k tomu hneď dva dôvody.
- Hoci je PHP veľmi vysoký jazyk a obsahuje veľa užitočných funkcií, časom začnete narážať na medzery v jeho štandardných knižniciach. Mnoho dôležitých funkcií v ňom totiž chýba alebo sa s nimi veľmi zle pracuje. Potom, čo zistíte, že ste si v každom projekte znovu a znovu programovali databázovú triedu, obsluhu formulárov alebo stránkovanie tabuľky, nutne vás napadne si pre tieto základné činnosti vytvoriť jednoduché knižnice.
- Z praktických skúseností vám môžem s kľudom povedať, že ak programujete v čistom PHP, tak je asi 50% vášho kódu nepotrebný balast. S použitím kvalitných knižníc napíšete aplikáciu za polovicu času as polovičným počtom riadkov. Aplikácia bude ľahko udržiavateľná a jej tvorba vás bude baviť. Nebudete stále vynájsť koleso a riešiť tie isté rutinné veci (ako napr. Ako overiť či je používateľ administrátor), budete sa naopak venovať vymýšľaní zaujímavých funkcií tej danej aplikácie ao tom programovanie predsa je.
Framework si môžete vytvoriť buď vlastné alebo použiť nejaký hotový, ktorým je práve Nette.
Čo potrebujete k tomu, aby ste mohli Nette používať
Snáď autora neurazíte, keď pre zjednodušenie uvediem, že Nette je teda vlastne balík knižníc pre PHP. Keď programujete v Nette, programujete stále v PHP a navyše používate rozhranie týchto knižníc, ktoré je objektové a stavia na MVC architektúre. Preto pre použitie Nette musíte mať s PHP pokročilé skúsenosti, poznať dobre objektovo orientované programovanie a tiež aspoň základy MVC architektúry. Učiť sa Nette bez týchto znalostí je zbytočný výdaj energie, pretože neporozumiete jeho princípom a len stratíte svoj čas. Ak nepoznáte OOP alebo MVC, prečítajte si prosím najprv tieto dva miestne seriály.
Ako Nette funguje
Popíšme si základné technológie a termíny, ktoré v seriáli budú padať. Výučba Nette pre nás bude potom ľahšie.
Sandbox
Aby sme mohli Nette použiť, potrebujeme tzv. Sandbox. To je kostra webové aplikácie s Nette frameworkom, do ktorej budeme ďalej pridávať stránky a tak vytvoríme svoj web na Nette. Sandbox je samozrejme k stiahnutiu na stránkach Nette, v ďalšom dieli si ho stiahneme.
MVP
Ako už bolo povedané, Nette je klasický MVC framework. Ono o sebe teda hovorí, že je MVP, však princíp je rovnaký.
Aplikácia stojí na komponentoch troch typov, ktoré sa v aplikácii delia o 3 základné úlohy - riadenie, logiku a výstup. Len takto rozdelená aplikácie je totiž prehľadná a rozšíriteľná.
- Presenter (presenters), riadenie - Presenter je komponent, s ktorou komunikuje užívateľ. Odovzdá jej parametre a ona mu vráti HTML stránku. Presenter typicky parametre odovzdá modelom, od ktorých získa dáta. Tieto dáta odovzdá pohľadom (šablónam), ktoré dáta začlení do nejakého HTML kódu. Tento HTML kód pošle presenter užívateľovi do prehliadača. Funguje teda ako taký prostredník.
- Modely (Models), logika - Obsahujú logiku aplikácie, ako napr. Prácu s databázou alebo výpočty. Každá dátová entita má väčšinou svoj model (užívateľ, článok, komentár, ...).
- Pohľady (V Nette Templates, česky šablóny), výstup - Obsahujú Latte šablóny s HTML kódom. Latte je šablónovacích jazyk, ktorý do HTML šablón umožňuje vkladať dáta z PHP pomocou špeciálnych značiek.
Router
Než sa používateľ dostane k prezentačného, narazí na tzv. Router (slovensky smerovač). Úlohou tohto komponentu je podľa URL adresy spoznať čo používateľ chce a zavolať mu príslušný presenter, ktorý jeho dotaz obslúži.
Životný cyklus
Pri použití frameworku si musíte byť istí tým, čo sa vo vnútri odohráva, inak sa z programátora degradujete na experimentátora, možno kúzelníka a iste by sa dalo vymyslieť niekoľko ďalších profesií. Popíšme si životný cyklus aplikácie v Nette - teda čo sa stane, keď používateľ zadá do adresného riadku napr .:
obchod.cz/book/harry-potter
Životný cyklus stránky je znázornený nasledujúcim diagramom. Hneď si ho aj popíšeme.
- Ako prvý sa požiadavka dostane k routeru. Ten podľa adresy zistí, že chceme niečo s knihami a preto zavolá BookPresenter a predá mu zvyšok URL.
- BookPresenter sa tiež pozrie do parametrov, čo sa po ňom chce a zistí, že používateľ chce vypísať knihu harry-potter. Získa si teda model BookModel, ktorému oznámi, že chce túto knihu. BookPresenter vykonáva pre knihy tzv. Akcie v tomto prípade zobrazenia detailu. Rovnako tak môže napr. Knihu pridať alebo odstrániť. Jednotlivé akcie sú v Presenter jednoducho reprezentované ako metódy.
- BookModel dostane v parametri názov knihy, tú získa z databázy a vráti.
- BookPresenteru sa vráti dáta od modelu a tieto dáta odovzdá pohľadu (šablóne).
- Šablóna obsahuje HTML stránku pre detail knihy a v nej nejaké Latte značky, do ktorých sa vloží dáta. Vloženie týchto dát obstará automaticky Latte engine.
- BookPresenteru príde z šablóny výslednej HTML a to pošle užívateľovi.
- Používateľovi sa v prehliadači zobrazí HTML stránka a vôbec netuší o tom všetkom, čo sme si tu teraz popísali
Pokojne si diagram niekoľkokrát prejdite, aby ste si boli v celom princípe istí.
Čo by ste ešte mali vedieť
- Každý presenter má typicky niekoľko svojich šablón pre rôzne akcie (detail, pridanie, zoznam, ...).
- Súvisiace modely a Presenter (so šablónami) sa združujú do tzv. Modulov (nepliesť s modelmi!). Modul je balík komponentov pre určitú časť webu (napr. FrontModule, AdminModule, BookModule (ak by sme mali pre knihy naozaj zložitý systém s niekoľkými modelmi, ...).
- Okrem MVC komponentov sa v Nette používajú ešte tzv. Filter. To sú malé pomocné funkcie pre šablóny, ktoré slúžia na formátovanie výstupu. Filter napr. Formátujeme dátum alebo skracujeme dlhý text.
To by bolo do úvodu všetko. Nabudúce, v lekcii Nette sandbox a IDE , si sprevádzkujeme Nette sandbox