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.