Slovník pojmů
Nette Framework
Nette spojuje PHP framework s knihovnami pro běžné části webové aplikace; jeho výhodou je čitelný aplikační model, ne automaticky hotová architektura.
Stručná definice
Framework z českého prostředí pro HTTP aplikace a jejich technické zázemí.
Nette Framework je framework pro PHP webové aplikace. Řeší přijetí HTTP požadavku, výběr cílové části aplikace, vykreslení odpovědi, konfiguraci služeb, formuláře i bezpečnostní pomocné mechanismy. Vedle celého frameworku existují samostatně instalovatelné balíčky, například Nette DI, Forms, Database, Security nebo Utils.
V českém a slovenském PHP prostředí má Nette historicky silné postavení. Moderní verze je rozdělená na Composer balíčky. Latte je šablonovací systém úzce používaný s Nette, ale je samostatným projektem; stejně tak lze bez celého frameworku používat třeba Nette Forms nebo DI container.
Použití
Kde Nette najde praktické uplatnění
Často se používá v dlouhodobě rozvíjených českých aplikacích, kde tým ocení zavedené konvence a dostupnou lokální znalost ekosystému.
- interní a administrační systémy s přihlašováním, rolemi a formuláři
- e-shopové administrace, katalogy a backoffice nad relační databází
- obsahové a zákaznické webové aplikace vykreslující HTML přes Latte
- postupná údržba a rozvoj existující aplikace založené na Nette
- samostatné použití formulářů, DI, databázové vrstvy nebo Tracy i mimo celý framework
Praktický příklad
Úprava produktu v e-shopové administraci
Router přiřadí adresu administrace k ProductPresenteru. Presenter vytvoří formulář pro název, cenu a stav produktu, ověří vstup na serveru a po úspěšném odeslání předá data aplikační službě. Služba vyhodnotí obchodní pravidla, například oprávnění upravit ceník nebo zaokrouhlení ceny, a přes repository uloží změnu do databáze.
Presenter pak zobrazí flash zprávu a přesměruje uživatele na detail. Formulář, Presenter ani Latte šablona proto nemusí nést pravidla cenotvorby. Tím lze stejnou službu později použít také pro import, API nebo příkazovou úlohu.
Jak funguje
Od URL k odpovědi
Nette Application rozděluje odpovědnost mezi router, Presenter, komponenty a šablonu. Aplikační pravidla je vhodné držet mimo vstupní vrstvu.
- Router Z URL vytvoří aplikační požadavek a vybere Presenter s akcí; stejný router umí také generovat odkazy zpět do aplikace.
- Presenter Je vstupním bodem stránky podobně jako controller v jiných frameworcích. Přijímá parametry, hlídá oprávnění, koordinuje případ použití a vrací HTML, JSON, redirect nebo jinou odpověď.
- Komponenta a formulář Znovupoužitelná část UI může obsloužit formulář nebo interakci. Validace vstupu musí proběhnout na serveru i tehdy, když ji doplňuje JavaScript.
- Aplikační služba Nese obchodní rozhodnutí a komunikuje s repository, databází nebo externím API. Presenter jí má předat jasně definovaná data, ne přenést do ní HTTP detaily.
- Latte nebo JSON Výstup se vykreslí šablonou Latte s escapováním podle kontextu, případně Presenter odešle datovou odpověď pro API.
Důležité části
Co tvoří Nette aplikaci
Celý framework skládá několik spolupracujících balíčků. Jejich přítomnost ale nemění odpovědnost za návrh domény a provoz aplikace.
Presentery a komponentový model
Presenter reprezentuje stránku nebo jinou aplikační odpověď a může obsahovat opakovaně použitelné UI komponenty. Není místem pro databázové dotazy, cenová pravidla ani řízení více integrací najednou.
Latte
Latte vykresluje HTML šablony a rozumí HTML kontextu, takže automaticky escapuje výstup podle místa použití. Bezpečnost stále závisí i na správném nakládání s důvěryhodným HTML a vstupy.
Forms a Security
Nette Forms podporují vykreslení, validaci a ochranu formulářového toku; nette/security řeší identity, autorizaci a bezpečné ukládání hesel. Samotný formulář nenahradí kontrolu oprávnění nad konkrétní změnou.
Nette DI a NEON
DI container sestavuje služby a předává závislosti. Konfigurace je obvykle v čitelném formátu NEON; hodnoty potřebné třídou se mají předat do konstruktoru, nikoli číst z globální konfigurace.
Nette Database
Nabízí Connection, SQL dotazy a Database Explorer pro práci s tabulkami a vztahy. Není to Doctrine ORM: pracuje přímo s databázovými řádky a dotazy, nikoli s Unit of Work nad entitami.
Rozhodnutí a ekosystém
Nette, Symfony a Laravel řeší podobné problémy různými konvencemi
Frameworky nejde seřadit od nejlepšího po nejhorší. Rozhoduje charakter aplikace, zkušenost týmu, navazující kód, integrace i dlouhodobá údržba.
- Nette Framework a balíčky
- Nette Application poskytuje Presenterový a komponentový webový model. Jeho balíčky lze instalovat samostatně, například DI, Forms, Database, Security, HTTP nebo Utils.
- Nette a Latte
- Latte není totéž co framework. Jde o samostatný šablonovací systém, který Nette Framework běžně integruje, ale lze jej použít i v jiném PHP projektu.
- Symfony
- Symfony staví na sadě komponent a frameworkových konvencích kolem controllerů, HTTP vrstvy a service containeru. U mezinárodních týmů může hrát roli rozsah komunity a návazných balíčků.
- Laravel
- Laravel klade silný důraz na produktivní konvence a provázaný ekosystém. Pro některé projekty bude přirozenější jeho Active Record přístup Eloquentu, jiné mohou preferovat Nette Database, Doctrine nebo explicitní SQL.
- Dlouhodobý existující projekt
- Nette může být rozumnou volbou i tehdy, když je již základem rozsáhlé české aplikace. Rizikovější než samotný framework bývá nezdokumentovaná doménová logika, neaktualizované závislosti a chybějící testy.
Výhody a omezení
Framework pomáhá strukturou, nevyřeší však návrh za tým
Přínosy
- sjednocuje routing, formuláře, šablony, konfiguraci a HTTP odpovědi
- DI container zviditelňuje závislosti služeb a usnadňuje jejich výměnu v testu
- komponenty i formuláře lze používat samostatně a znovu využít
- v českém a slovenském prostředí často existuje zkušenost s údržbou Nette aplikací
Na co pozor
- doménová logika přímo v Presenterech nebo komponentách se obtížně znovu používá mimo webové UI
- magie persistentních parametrů, signálů a komponent nemá zakrýt tok dat a oprávnění
- Database Explorer automaticky neřeší datový návrh, transakční hranice ani výkonnost každého složitého dotazu
- silná vazba na frameworkové typy v jádru aplikace ztěžuje pozdější změny a samostatné testování
Hranice použití
Vhodnost určuje kontext aplikace, ne žebříček frameworků.
Nette dává smysl pro PHP webovou aplikaci, která těží z jeho Presenterů, formulářů, Latte, DI a existujících týmových zvyklostí. Dobrou volbou může být také postupný rozvoj fungujícího Nette systému, pokud se současně opravují závislosti, testy a hranice odpovědností.
Pro čistě konzolový skript, malý jednorázový import nebo službu s minimem webových potřeb může stačit samostatný balíček či menší řešení. Naopak při spolupráci s týmem zvyklým na jiný framework není přepis pouze kvůli preferenci technologie obvykle prioritou před obchodní hodnotou a bezpečností změny.
Na co myslet
Zdravá Nette aplikace odděluje webové UI od pravidel systému
Při rozvoji aplikace je důležitější čitelnost závislostí a ověřitelná pravidla než počet použitých frameworkových funkcí.
- Presentery držet jako vstupní a prezentační vrstvu, ne jako centrum domény
- validovat formulářová data na serveru a autorizovat konkrétní operaci nad konkrétními daty
- předávat služby a konfigurační hodnoty explicitně přes DI
- parametrizovat databázové dotazy a u důležitých změn vymezit transakci
- testovat aplikační služby i klíčové HTTP scénáře a průběžně aktualizovat závislosti
Časté otázky
Co je dobré o Nette vědět
Je Nette Framework totéž co Latte?
Ne. Nette Framework poskytuje aplikační strukturu. Latte je samostatný šablonovací systém, který se s Nette často používá, ale může fungovat i mimo něj.
Je Presenter to samé jako controller?
V Nette je Presenter vstupní třída pro stránku nebo odpověď aplikace a v jiných frameworcích má nejblíže controlleru. Má hlavně koordinovat požadavek; obchodní logika a databázová práce patří do samostatných služeb.
Musí Nette aplikace používat Nette Database?
Nemusí. Nette Database je jedna z možností. Aplikace může používat Dibi, Doctrine, jinou databázovou knihovnu nebo explicitní SQL podle potřeb projektu.
Chrání Nette Forms automaticky celou aplikaci?
Formuláře pomáhají s validací a bezpečným formulářovým tokem, ale nenahrazují autorizaci, správné zpracování vstupu ani bezpečný návrh databázových a integračních operací.
Je Nette lepší než Symfony nebo Laravel?
Neexistuje univerzální pořadí. Framework je třeba vybírat podle potřeb aplikace, zkušenosti týmu, provozních požadavků a existujícího kódu. V dlouhodobém projektu bývá podstatnější kvalitní návrh a údržba než změna frameworku bez jasného důvodu.
Jak Nette používám v praxi
Nette jsem používal při práci na vlastních i týmových PHP aplikacích.
Máte-li zájem o konkrétní profesní zkušenost s Nette, Dibi a Tracy, navazuje na toto heslo samostatná stránka zkušeností.