Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Translate to English… Ins Deutsche übersetzen…

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í:

  1. odkazy (kromě <a href=""> teď myslím i <form action="">)
  2. renderování validního (X)HTML
  3. 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 RSS 2.0 komentářů » přidat

#1 Hds nový

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.

Posláno 5. 3. 2006 v 11.22 | Odpovědět

#2 Pitrsonek http://tools.cikcak.com nový

Oh yeh give me your power programme so well done .-)

Už se nemohu dočkat vice o tvém novém dítku Nette.

Posláno 5. 3. 2006 v 11.29 | Odpovědět
avatar

#3 Mordae mordae@mordae.net nový

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 přihlášenému uživateli přístupná či zapovězená.
Funkce pro přihlašování a ověřování jsou samozřejmost.

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).

Posláno 5. 3. 2006 v 11.35 | Odpovědět
Na komentář reagoval [7] medden [18] David Grudl
avatar

#4 Tomik tomik@jmx.cz nový

Také se těším… :)

Posláno 5. 3. 2006 v 11.48 | Odpovědět
avatar

#5 pif http://www.djpif.com nový

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 :).

Posláno 5. 3. 2006 v 11.52 | Odpovědět
avatar

#6 johno http://johno.jsmf.net/ nový

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?

Posláno 5. 3. 2006 v 11.55 | Odpovědět
Na komentář reagoval [10] llook [18] David Grudl
avatar

#7 medden michal.sustr@gmail.com nový

Nette má rádo krásná URL a rozhodně ne taková, co připomínají spíše GUID

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.

Posláno 5. 3. 2006 v 11.58 | Odpovědět
Na komentář reagoval [18] David Grudl
avatar

#8 Pavel H. pheidrich@seznam.cz nový

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í! ;-)

Posláno 5. 3. 2006 ve 12.04 | Odpovědět
Na komentář reagoval [18] David Grudl

#9 pako nový

To je služba maličkého jednouchého Nette

No, já doufám, že bude mít uši obě ;)

Posláno 5. 3. 2006 ve 12.04 | Odpovědět
avatar

#10 llook http://llook.wz.cz/weblog/ nový

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:

Dopředu bych chtěl varovat, že Nette není šablonovací systém ani databázový layer.

Posláno 5. 3. 2006 ve 12.28 | Odpovědět

#11 Pitrsonek nový

Da se nekde stahnout Dibi?

Posláno 5. 3. 2006 ve 13.07 | Odpovědět
Na komentář reagoval [18] David Grudl
avatar

#12 frettie http://frettie.net nový

zajimave … zajimave … :)

Posláno 5. 3. 2006 v 16.14 | Odpovědět

#13 Michal Hantl http://hantl.info nový

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?:)

Posláno 5. 3. 2006 v 17.08 | Odpovědět
Na komentář reagoval [15] Stalker

#14 Keff http://www.tomaskafka.com nový

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 :)

Posláno 5. 3. 2006 ve 20.07 | Odpovědět

#15 Stalker nový

#13 Michal Hantl: Hm, máme podobné „problémy“ ;)

Každopádne, na Nette som veľmi zvedavý.

Posláno 5. 3. 2006 ve 20.27 | Odpovědět

#16 Karel nový

To je služba maličkého jednouchého Nette, které stojí na nápadu, nikoliv na stovkách KB kódu

Pozor aby se autor „nejlepšího“ CMS neurazil :o)

Posláno 5. 3. 2006 ve 22.38 | Odpovědět
Na komentář reagoval [17] johno [18] David Grudl
avatar

#17 johno http://johno.jsmf.net/ nový

#16 Karel: 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.

Posláno 5. 3. 2006 ve 23.33 | Odpovědět
avatar

#18 David Grudl http://davidgrudl.com nový

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 medden: Session ID lze přenášet stejně tak v cookies nebo URL – obě cesty jsou pro HTTP zcela přirozené.

#8 Pavel H.: Nějakou doménu, nejspíš v podobě www.nette-něco.info, určitě registrovat plánuji.

#11 Pitrsonek: Nechal jsem to (zatím) spát, viz

#16 Karel: 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.

Posláno 5. 3. 2006 ve 23.58 | Odpovědět
avatar

#19 džidžir jsveda@gmail.com nový

Omlouvám se za možná pitomý dotaz, ale jaký je vlasně rozdíl mezi PHP frameworkem a CMS?

Posláno 6. 3. 2006 ve 2.38 | Odpovědět
Na komentář reagoval [20] David Grudl
avatar

#20 David Grudl http://davidgrudl.com nový

#19 džidžir: 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.

Posláno 6. 3. 2006 ve 3.11 | Odpovědět
avatar

#21 Odin http://ondrejstanek.info nový

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 …

Posláno 6. 3. 2006 v 11.55 | Odpovědět
avatar

#22 noname noname@noname.non nový

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?

Posláno 6. 3. 2006 ve 12.16 | Odpovědět
Na komentář reagoval [23] pif
avatar

#23 pif http://www.djpif.com nový

#22 noname: co si clovek nenapise sam, to nema ;)))))

Posláno 6. 3. 2006 ve 22.22 | Odpovědět

#24 Fotograf http://www.boruvka.cz nový

zajímavej článek

Posláno 23. 3. 2006 ve 22.46 | Odpovědět

#25 petr nový

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!

Posláno 21. 9. 2007 ve 13.44 | Odpovědět

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře ani hlasovat

Výtah na začátek článku na první komentář

Názory čtenářů v diskusích nejsou názory provozovatele webu, a ten za jejich obsah neodpovídá.

phpFashion © 2004, 2010 David Grudlo webu

Pokud není uvedeno jinak, podléhá obsah těchto stránek licenci Creative Commons BY-NC-ND Creative Commons License BY-NC-ND

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.