Nette: začínáme aneb motivace
Tohle je první ze série článků o novém frameworku. Seznámím vás s jeho základními rysy a principy a poté se podíváme na ukázkové příklady. Než se dostaneme ke konkrétním zdrojovým kódům, je totiž třeba pochopit jeho filozofii. Nebo jednu ukázku si můžeme dát hned. Takhle budou zanedlouho vypadat vaše aplikace: 🙂
<?php
require 'loader.php';
$application = new Application;
$application->run();
?>
Na čem tedy Nette staví?
Nic nepsat dvakrát
Znuvupoužitelnost kódu je základní princip Nette a důsledek mé vrozené lenosti. 🙂 Základní jednotkou znovupoužitelnosti je komponenta. Je zcela nezávislá na okolí (stránce či webu) a tudíž jednou napsanou komponentu můžeme používat znovu a znovu. Bude-li mít projekt Nette úspěch, vznikne určitě nabídka nejrůznějších komponent.
Komponenty (či stránky) nemají žádné XML definice. Děsí mě totiž nutnost udržovat konzistenci mezi dvěma soubory, navíc je-li každý v jiném jazyce. Nette je vymyšleno tak, aby se komponenta intuitivně popsala těmi nejzákladnějšími prostředky jazyka PHP.
Když „nic nepsat dvakrát“, tak ani v případě (X)HTML kódu. Vždyť stránky z jednoho webu bývají velmi podobné, mají skoro stejnou hlavičku, patičku, podobnou navigaci atd. Ona podobnost je natolik podstatný rys, že je hluboce zakořeněn i v Nette. Nic nepíšete dvakrát. Píšete jen to, v čem se jednotlivé stránky liší.
Pravidla tvoříte sami
Snad každý framework trvá na pevných pravidlech pojmenování stránek,
souvisejících tříd a souborů. Tato trojakost se mi nelíbila a hledal jsem
jiné řešení. V Nette si můžete soubory pojmenovávat podle libosti,
dávat si je do libovolných adresářů. Rozhodující je, co vám vyhovuje, co
vám bude připadat přehledné. Pokud vám to udělá dobře, můžete všechny
třídy narvat třeba do jednoho souboru. Je to jedno. Nemusíte nikde
uvádět, ve kterém souboru se která třída nachází. Na příkaz
require
klidně zapomeňte.
Hypertextová spřízněnost
Nette chápe web jakožto soubor vzájemně propojených hypertextových dokumentů, zapsaných jazykem (X)HTML a zpřístupněných přes protokol HTTP. Svatou trojici tedy představují:
- odkazy (kromě
<a href="">
teď myslím i<form action="">
) - renderování validního (X)HTML
- HTTP se všemi jeho schopnostmi
Právě „odkazy“ dělají ze statických stránek živou aplikaci, a proto se na ně se upírá největší pozornost. Pokud zapíšete odkaz na neplatnou stránku, Nette vás upozorní. Pokud omylem předáte stránce parametr, který nepoužívá, Nette vás opět upozorní. Ale ne až po odkliknutí odkazu, upozorní hned.
A teď si držte klobouky. Dokončíte složitou webovou aplikaci a vedení se rozhodne přidat do hlavičky všech stránek přepínač jazyků. S technickým požadavkem, že zvolený jazyk se musí mezi všemi stránkami přenášet určitým parametrem v URL. Problém? S Nette stačí jeden zásah do jednoho souboru! A všechny stránky, kterých se to týká, si okamžitě a zcela automaticky budou předávat parametr se zvoleným jazykem. Dokonce včetně komplikovaných formulářů. Dokonce včetně všech komponent!
A nebojte se, to není služba nějakého složitého systému, kterému se musíte přizpůsobovat. To je služba maličkého jednouchého Nette, které stojí na nápadu, nikoliv na stovkách KB kódu.
URL magie
URL je pevným bodem na internetu. Pokud se nám stránka líbí, uložíme si její URL do oblíbených, nebo odkážeme na její URL ve svých stránkách. Vhodně zvolená URL jsou tedy alfou a omegou kvalitních webových prezentací. Nette tuto pravdu ctí.
Nette má rádo krásná URL a rozhodně ne taková, co připomínají spíše GUID (viz třeba tady) 🙂 Naopak nemá rádo Postback (viz Jsem zděšen z ASP.NET), který základní principy URL obchází.
Už v jádru je zabudovaná podpora pro dva druhy odkazů, říkejme jim absolutní a relativní. V levé liště blogu vidíte odkaz na „předchozí článek“. To nutně není článek s ID o jedno menším, než tento. Vlastně v době vykreslení této stránky nelze přesně říci, který článek bude předchozím, protože než odkaz navštívíte, může dojít na blogu k nejrůznějším změnám. Tedy relativní odkaz se vyhodnotí až po odkliknutí. Naopak v případě odkazu na konkrétní článek je jeho ID jasné hned. Tedy se vyhodnotí už v době generování stránky.
Cool URL
A když podpora URL se vším všudy, tak je třeba pamatovat i na hezká
URL. Ty se na straně serveru zpravidla aktivují několika příkazy
v jediném souboru .htaccess
. Proto i Nette usiluje o stejnou
jednoduchost. Stačí vytvořit pravidla podobná těm v .htaccess
a jedním příkazem je aktivovat. Pro celý web. Pravidla fungují
obousměrně, tedy hezká URL nejen dekódují, ale také generují. Zapnutí,
vypnutí nebo změna podoby URL je věcí okamžiku!
Událostmi řízený model
V Nette se nestaráte o předávání parametrů přes HTTP protokol, jejich analýzu a podobně. Naopak rovnou píšete funkce, které se kliknutím na odkaz (či stlačením tlačítka) aktivují. Samozřejmě je možné funkce volat i JavaScriptovou událostí. A také jim předat libovolné parametry. Soustředíte se tedy přímo na problém. Tvorba složitých administračních rozhraní se stává hračkou.
Uživatelská práva
Systém uživatelských práv a rolí přesně stanoví, která složka, konkrétní stránka či jednotlivá událost na stránce bude aktuálnímu uživateli přístupná či zapovězená. Jedním pravidlem kupříkladu povolíte administrační část webu jen pro správce a pak už jen libovolným uživatelům přidělujete roli správce. Funkce pro přihlašování a ověřování jsou samozřejmost.
Komentáře
Hds #1
Vypadá to moc zajímavě. Velice mě zajímá OOP, N-tier architektura a design patterny, takže se velice těším na další ukázky a specifikace. Mohu se zeptat, v jaké fázi je vývoj Nette teď, a v jaké licenci bude Nette vydáno? Děkuji.
Pitrsonek #2
Oh yeh give me your power programme so well done .-)
Už se nemohu dočkat vice o tvém novém dítku Nette.
Mordae #3
Po zajimavem uvodu mam mirne obavy z konce. Tise doufam, ze to nedopadne tak, ze bude nutne udrzovat seznam operaci nad komponentou a vedle pro kazdeho uzivatele (povolit/zakazat).
Tomik #4
Také se těším… :)
pif #5
Defacto mam neco podobnyho, myslim ze kazdy programator, ktery v php uz vytvarel narocne aplikace ma nejaky know how a ja jsem taky liny, takze defacto myslenky tohoto frameworku sdilim. Napady nijak prevratne, ja osobne si pockam na realizaci, pouziva a vubec :).
johno #6
V podstate ma tento popis nijako neprekvapil. Ak to však všetko bude fungovať tak ako má, potom zagratulujem.
Perzistentná vrstva bude čo? Creole? Dibi? Čokoľvek?
medden #7
Takže tu bude závislosť na cookies pre vytvorenie session?
Inak zdieľam ďalšie obavy s #3 Mordae.
No každopádne som veľmi zvedavý, čo z toho bude 😉 Pekná práca.
Pavel H. #8
Uvažoval jsi už o registraci domény nette.cz či nette.info jako u texy.info? Zatím jsem narazil jen na nette.org, ale pokud se opravdu bude jednat o tak převratný 😉 framework, stálo by to za zvážení! 🙂
Jinak, jak píší šichni ostatní, už jsem málem sežral boty zvědavostí! 😉
pako #9
No, já doufám, že bude mít uši obě ;)
llook #10
Na podrobnosti k té autentikaci a autorizaci jsem taky zvědavej. Doufejme, že představování Nette půjde rychleji než u Dibi. 🙂
#6 johno, K tomu už něco bylo řečeno:
Pitrsonek #11
Da se nekde stahnout Dibi?
frettie #12
zajimave … zajimave … :)
Michal Hantl #13
Souhlasím s Pifem. Taky si bastlím něco, co se nějakému PHP grálu snaží přiblížit, ale umí to asi jen 3/5 z toho, co tu David popsal, je to CMS a bude to přirozeně o dost hůř koncipované a naprogramované:).
Těším se na nějaký ukázkový zdroják. Bude nějaké video typu blog na nette za 18 minut?:)
Keff #14
Jezis, to zni ale optimisticky :). Uz jen par slov o novem webu 3.0 a definitivne uverim ze –si z nas opet delas pr…– pripravujes novou mystifikaci :)
Stalker #15
#13 Michale Hantle, Hm, máme podobné „problémy“ ;)
Každopádne, na Nette som veľmi zvedavý.
Karel #16
Pozor aby se autor „nejlepšího“ CMS neurazil :o)
johno #17
#16 Karle, Málo ľudí totiž vie, že kvalita softvéru má presne takú istú závislosť od veľkosti zdrojákov ako kvalita filmu od počtu písmen v jeho dialógoch.
Aplikáciou axiómy si teda dovolím tvrdiť, že Nette bude podobná filmom so skvelým Laurelom a Hardym či Charlie Chaplinom.
David Grudl #18
Na hodně zdejších otázek odpoví další díly, tedy nebudu předbíhat. Tedy jen k některým:
#3 Mordae, Hledám cesty, jak nejjednodušeji dosáhnout nejkomplexnějších výsledků. Tedy jakýchkoliv úkolů, které leda prudí, se obávat nemusíš.
#6 johno, Frameworky těsně propojené s databází vypadají na první pohled nesmírně efektně (viz třeba Ruby on Rails, CakePHP apod). Realisticky však musím říct, že docela zřídka řeším situace, jaké demonstrují ony tutoriály. Výsledkem je to, že Nette se vyštípalo jakýchkoliv vazeb na databáze. Naopak má propracovaný systém komponent a není problém si napsat několik (znovupoužitelných) komponent, které aplikaci s oblíbenou databází či DAL propojí.
Tedy, klidně takové komponenty dám k dispozici na webu Nette, ale architektonicky to budou stále komponenty, nikoliv jádro.
#7 meddene, Session ID lze přenášet stejně tak v cookies nebo URL – obě cesty jsou pro HTTP zcela přirozené.
#8 Pavle H., Nějakou doménu, nejspíš v podobě
www.nette-něco.info
, určitě registrovat plánuji.#11 Pitrsonku, Nechal jsem to (zatím) spát, viz
#16 Karle, není rozhodně nic špatného na tom, pokud má aplikace stovky KB kódu, ale je to malinko problém v případě PHP frameworku. Ten kód se zpracovává při každém požadavku a přitom jde jen o podpůrný nástroj.
džidžir #19
Omlouvám se za možná pitomý dotaz, ale jaký je vlasně rozdíl mezi PHP frameworkem a CMS?
David Grudl #20
#19 džidžire, framework je nástroj usnadňující tvorbu aplikací a CMS je konkrétní typ aplikace. Tedy obrazně framework je papír a písmena a CMS je detektivní literatura.
Odin #21
Jen se přimlouvám za stránky věnované jen Nette. S nějakýma fajn tutoriálama. Kde bysme mohli sdílet komponenty …
noname #22
jo, taky se těším. Bude tento framework umět i formuláře? To je alespoň pro mě nejotravnější záležitost v PHP – tj. nadefinovat všechny políčka, dát jim pravidla, přidat funkce, které se postarají o dodržení pravidel, přidat funkce pro parsování vstupních hodnot z databáze a naopak ukládání výstupních funkcí do databáze, dávat si pozor, aby nešla data vycucnout nějakým podvrhnutým dotazem, výměna hodnot mezi více stránkami … Teď na to používám občas PEAR:QuickForm, jenže ten je stále až moc těžkopádný a spoustu věcí nativně neumí (parsování dat do/z databáze, přehledný xhtml výstup…) – btw neznáte na to někdo něco lepšího?
pif #23
#22 noname, co si clovek nenapise sam, to nema ;)))))
Fotograf #24
zajímavej článek
petr #25
cely web je o novem supr trupr frameworku, ale nikde odkaz na stazeni? alespon ne viditelne… nemam moc cas se procitat filozofii a prvni dojem (zda to cist) bych si udelal az z filozofie aplikovane v praxi (tj. kodu), diky!
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.