Na navigaci | Klávesové zkratky

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

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

    před 11 lety
  2. Pitrsonek http://tools.cikcak.com #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.

    před 11 lety
  3. Mordae #3

    avatar

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

    před 11 lety | reagoval [7] medden [18] David Grudl
  4. Tomik #4

    avatar

    Také se těším… :)

    před 11 lety
  5. pif http://www.djpif.com #5

    avatar

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

    před 11 lety
  6. johno http://johno.jsmf.net/ #6

    avatar

    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?

    před 11 lety | reagoval [10] llook [18] David Grudl
  7. medden #7

    avatar

    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.

    před 11 lety | reagoval [18] David Grudl
  8. Pavel H. #8

    avatar

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

    před 11 lety | reagoval [18] David Grudl
  9. pako #9

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

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

    před 11 lety
  10. llook http://llook.wz.cz/weblog/ #10

    avatar

    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.

    před 11 lety
  11. Pitrsonek #11

    Da se nekde stahnout Dibi?

    před 11 lety | reagoval [18] David Grudl
  12. frettie http://frettie.net #12

    avatar

    zajimave … zajimave … :)

    před 11 lety
  13. Michal Hantl http://hantl.info #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?:)

    před 11 lety | reagoval [15] Stalker
  14. Keff http://www.tomaskafka.com #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 :)

    před 11 lety
  15. Stalker #15

    #13 Michale Hantle, Hm, máme podobné „problémy“ ;)

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

    před 11 lety
  16. Karel #16

    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)

    před 11 lety | reagoval [17] johno [18] David Grudl
  17. johno http://johno.jsmf.net/ #17

    avatar

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

    před 11 lety
  18. David Grudl http://davidgrudl.com #18

    avatar

    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.

    před 11 lety
  19. džidžir #19

    avatar

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

    před 11 lety | reagoval [20] David Grudl
  20. David Grudl http://davidgrudl.com #20

    avatar

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

    před 11 lety
  21. Odin http://ondrejstanek.info #21

    avatar

    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 …

    před 11 lety
  22. noname #22

    avatar

    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?

    před 11 lety | reagoval [23] pif
  23. pif http://www.djpif.com #23

    avatar

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

    před 11 lety
  24. Fotograf http://www.boruvka.cz #24

    zajímavej článek

    před 11 lety
  25. 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!

    před 9 lety

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