Lekce 1 - Úvod do Nette frameworku pro PHP
Vítejte u první lekce kurzu tvorby webových aplikací v PHP frameworku Nette. Nette je kompletní framework pro PHP, který výrazně zjednodušuje tvorbu webových aplikací. Jeho autorem je český vývojář David Grudl. Framework je kvalitně objektově navržený a v Čechách velmi rozšířený. Fungují na něm velké projekty jako např. GE Money, Slevomat, ČSFD a také obrovská spousta menších webů a eshopů. Když ho budete umět, tak nějakou práci vždy najdete. V dnešním tutoriálu si vysvětlíme proč bychom měli používat PHP frameworky a řekneme si jak Nette funguje.
Tento seriál je psaný pro aktuální Nette, tedy verzi 3.X
Pozor, dodržuj přesné verze komponent/frameworku! Pokročilé projekty jako tento jsou složené z komponent. Možná by tě napadlo použít nejnovější verzi nějaké komponenty, co zrovna včera vyšla. Projekt ti pak ale bez odborné úpravy pravděpodobně nebude fungovat! U verzí komponent neplatí jako např. u aktualizace Windows, že chceme každý den používat tu nejnovější. Neustálé aktualizace všeho by totiž vyžadovaly každodenní a komplexní změny kódu projektu a reálně se tak neprovádějí. Ze stejného důvodu i my aktualizujeme kurzy v pravidelných intervalech a nové verze k sobě pak sladíme tak, aby vše fungovalo.
Proč používat framework
Framework je ucelený soubor do sebe pasujících knihoven. V PHP se bez kvalitních knihoven u vážnějších projektů neobejdete. Jsou k tomu hned dva důvody.
- Ačkoli je PHP velmi vysoký jazyk a obsahuje spoustu užitečných funkcí, časem začnete narážet na mezery v jeho standardních knihovnách. Mnoho důležitých funkcí v něm totiž chybí nebo se s nimi velice špatně pracuje. Poté, co zjistíte, že jste si v každém projektu znovu a znovu programovali databázovou třídu, obsluhu formulářů nebo stránkování tabulky, nutně vás napadne si pro tyto základní činnosti vytvořit jednoduché knihovny.
- Z praktických zkušeností vám mohu s klidem říci, že pokud programujete v čistém PHP, tak je asi 50% vašeho kódu nepotřebný balast. S použitím kvalitních knihoven napíšete aplikaci za polovinu času a s polovičním počtem řádků. Aplikace bude snadno udržovatelná a její tvorba vás bude bavit. Nebudete stále vynalézat kolo a řešit ty samé rutinní záležitosti (jako např. jak ověřit zda je uživatel administrátor), budete se naopak věnovat vymýšlení zajímavých funkcí té dané aplikace a o tom programování přeci je.
Framework si můžete vytvořit buď vlastní nebo použít nějaký hotový, kterým je právě Nette.
Co potřebujete k tomu, abyste mohli Nette používat
Snad autora neurazím, když pro zjednodušení uvedu, že Nette je tedy vlastně balík knihoven pro PHP. Když programujete v Nette, programujete stále v PHP a navíc používáte rozhraní těchto knihoven, které je objektové a staví na MVC architektuře. Proto pro použití Nette musíte mít s PHP pokročilé zkušenosti, znát dobře objektově orientované programování a také alespoň základy MVC architektury. Učit se Nette bez těchto znalostí je zbytečný výdej energie, protože neporozumíte jeho principům a jen ztratíte svůj čas. Pokud neznáte OOP nebo MVC, přečtěte si prosím nejprve tyto dva místní seriály.
Jak Nette funguje
Popišme si základní technologie a termíny, které v seriálu budou padat. Výuka Nette pro nás bude poté snadnější.
Sandbox
Abychom mohli Nette použít, potřebujeme tzv. sandbox. To je kostra webové aplikace s Nette frameworkem, do které budeme dále přidávat stránky a tak vytvoříme svůj web na Nette. Sandbox je samozřejmě ke stažení na stránkách Nette, v dalším dílu si ho stáhneme.
MVP
Jak již bylo řečeno, Nette je klasický MVC framework. Ono o sobě tedy říká, že je MVP, nicméně princip je stejný.
Aplikace stojí na komponentách třech typů, které se v aplikaci dělí o 3 základní úlohy - řízení, logiku a výstup. Jen takto rozdělená aplikace je totiž přehledná a rozšiřitelná.
- Presentery (Presenters), řízení - Presenter je komponenta, se kterou komunikuje uživatel. Předá jí parametry a ona mu vrátí HTML stránku. Presenter typicky parametry předá modelům, od kterých získá data. Tato data předá pohledům (šablonám), které data začlení do nějakého HTML kódu. Tento HTML kód pošle presenter uživateli do prohlížeče. Funguje tedy jako takový prostředník.
- Modely (Models), logika - Obsahují logiku aplikace, jako např. práci s databází nebo výpočty. Každá datová entita má většinou svůj model (uživatel, článek, komentář,...).
- Pohledy (V Nette Templates, česky šablony), výstup - Obsahují Latte šablony s HTML kódem. Latte je šablonovací jazyk, který do HTML šablon umožňuje vkládat data z PHP pomocí speciálních značek.
Router
Než se uživatel dostane k presenteru, narazí na tzv. router (česky směrovač). Úkolem této komponenty je podle URL adresy poznat co uživatel chce a zavolat mu příslušný presenter, který jeho dotaz obslouží.
Životní cyklus
Při použití frameworku si musíte být jistí tím, co se uvnitř odehrává, jinak se z programátora degradujete na experimentátora, možná kouzelníka a jistě by se dalo vymyslet několik dalších profesí. Popišme si životní cyklus aplikace v Nette - tedy co se stane, když uživatel zadá do adresního řádku např.:
obchod.cz/book/harry-potter
Životní cyklus stránky je znázorněný následujícím diagramem. Hned si ho i popíšeme.
- Jako první se požadavek dostane k routeru. Ten podle adresy zjistí, že chceme něco s knihami a proto zavolá BookPresenter a předá mu zbytek URL.
- BookPresenter se také podívá do parametrů, co se po něm chce a zjistí, že uživatel chce vypsat knihu harry-potter. Získá si tedy model BookModel, kterému sdělí, že chce tuto knihu. BookPresenter provádí pro knihy tzv. akce, v tomto případě zobrazení detailu. Stejně tak může např. knihu přidat nebo odstranit. Jednotlivé akce jsou v presenterech jednoduše reprezentované jako metody.
- BookModel dostane v parametru název knihy, tu získá z databáze a vrátí.
- BookPresenteru se vrátí data od modelu a tato data předá pohledu (šabloně).
- Šablona obsahuje HTML stránku pro detail knihy a v ní nějaké Latte značky, do kterých se vloží data. Vložení těchto dat obstará automaticky Latte engine.
- BookPresenteru přijde z šablony výsledné HTML a to pošle uživateli.
- Uživateli se v prohlížeči zobrazí HTML stránka a vůbec netuší o tom všem, co jsme si tu nyní popsali
Klidně si diagram několikrát projděte, abyste si byli v celém principu jistí.
Co byste ještě měli vědět
- Každý presenter má typicky několik svých šablon pro různé akce (detail, přidání, seznam,...).
- Související modely a presentery (se šablonami) se sdružují do tzv. modulů (neplést s modely!). Modul je balíček komponent pro určitou část webu (např. FrontModule, AdminModule, BookModule (pokud bychom měli pro knihy opravdu složitý systém s několika modely,...).
- Kromě MVC komponent se v Nette používají ještě tzv. Filtery. To jsou malé pomocné funkce pro šablony, které slouží k formátování výstupu. Filtery např. formátujeme datum nebo zkracujeme dlouhý text.
To by bylo do úvodu vše.
Příště, v lekci Nette sandbox a IDE, si zprovozníme Nette sandbox