Přejít k navigační liště

Zdroják » PHP » Nette Framework: zvyšte svoji produktivitu

Nette Framework: zvyšte svoji produktivitu

Články PHP, Různé

Jaké jsou možnosti PHP frameworku Nette? Proč se vyplatí používat Nette místo programování v samotném PHP? Dnešním článkem začíná obsáhlý seriál, který vás s frameworkem Nette podrobně seznámí. Pojďte si s námi zkusit vytvořit v Nette svůj první formulář a rychle poznáte jeho výhody sami.

Opravdoví programátoři nepoužívají frameworky. Píší webové aplikace přes telnet rovnou na server a to zpaměti. Tímto jim vzdávám hold a dál už se bude seriál věnovat pouze frameworkům.

Frameworky jsou knihovny, které mají ulehčit práci při programování aplikace. To znamená méně psaní, přehlednější kód a rychlejší vývoj. V případě webových frameworků se často zmiňuje MVC, což je architektura rozdělující aplikaci na nezávislé vrstvy. O té si povíme více ve třetím dílu.

Disclaimer: Autor článku je hlavním vývojářem frameworku Nette.

Pokud tvoříte webové aplikace a už vás nebaví řešit neustále se opakující úkoly, ty tisíce drobností, které odvádějí pozornost od vlastní aplikace a dělají z programování nudnou činnost, tak je seriál o Nette Frameworku určen právě pro vás.

Co je Nette Framework?

Nette Framework je napsaný v PHP 5 s plným využitím objektů (OOP). Ačkoliv vznikl už v roce 2004, teprve vloni byl uvolněn jako open source a zpřístupněn veřejnosti. Jeho licence, která vychází z BSD, patří k těm nejvolnějším. Vyrostla kolem něj jedna z nejaktivnějších komunit českých PHP vývojářů, ne-li nejaktivnější vůbec. Nette používají významné tuzemské společnosti. A podle testu uveřejněném na serveru Root je jedním z nejvýkonnějších frameworků.

Framework je koncipován jako „otevřený“, je ho tedy možné používat i v primitivních webových aplikacích nebo společně s jiným otevřeným frameworkem, jako je například Zend Framework.

Primitivní aplikace?

Ano, myslím takový ten webíček pro místní restauraci, kde jsou dvě statické stránky a kontaktní formulář. Připadá vám, že na něco takového použít framework je jako jít na komára s plamenometem? A proč ne, je to účinné a zábavné! Obojí.

Složitější aplikace

Tedy všechny e-shopy, wiki, blogy a CMS. Teprve tady se ukáže síla frameworku v plné kráse. Umožní rychle přetavit myšlenku do kvalitní webové aplikace. Eliminuje bezpečnostní rizika. A vede vás k psaní programů s čistým designem a důrazem na budoucí rozšiřitelnost. To ostatně bude hlavní náplní našeho seriálu.

Enterprise aplikace

Tedy nejvyšší úroveň webových aplikací, například bankovní systémy. Tohle že chcete psát v PHP? 

Volba distribuce

Pojďme tedy napsat první aplikaci za použití Nette Frameworku. Budu předpokládat, že máte nakonfigurovaný HTTP server. Postupů, jak na to, najdete na mateřském Rootu požehnaně. Přistupme rovnou ke stažení frameworku. Jak vidíte, k dispozici jsou tři verze. Poslední z nich je určená pro PHP 5.3 a využívá jmenných prostorů. Nacházejí se v ní třídy pojmenované jako NetteObject, NetteWebSession a podobně. Této verzi patří, stejně jako aluminiu, budoucnost.

Bohužel zatím je aktuální PHP ve verzi 5.2, které na jmenné prostory hledí jako tele na nová vrata a zmůže se maximálně na udivený parse error. Proto existuje verze, kde se prostory eliminují a třídy se nazývají jen Object, Session atd. Následný přechod na jmenné prostory bude snadný, stačí totiž doplnit do skriptů deklaraci use NetteObject, NetteWebSession; Stejnou techniku budu používat i v tomto seriálu. Ukázkové kódy budou psané pro PHP 5.2 a zároveň připravené pro PHP 5.3.

Pokud je pro vás důležitější zamezení případným kolizím v názvech tříd než budoucí přechod na PHP 5.3, bude se vám hodit verze označená jako „prefixed“. Zde mají všechny třídy předponu N, tj.  NObject, NSession  atd.

Vězte, že všechny verze jsou funkčně 100% ekvivalentní.

Stáhněte a rozbalte si tedy verzi pro PHP 5.2 (neprefixovanou) či PHP 5.3. A rovnou si napište první program:

// zde prosím uveďte skutečnou cestu ke složce Nette uvnitř distribuce
require 'Nette/loader.php';

// pokud používáte verzi pro PHP 5.3, odkomentujte následující řádek:
// use NetteFramework;

// vypíše číslo verze, v současnosti to je 0.8
echo Framework::VERSION; 

S tímto programem sice žádnou programátorskou soutěž nevyhrajete, ale jako indikátor, jestli všechno běží, jak má, to stačí. Vidíte, jak je kód připraven na budoucí PHP 5.3, a především, jak se celý framework načítá. Stačí načíst jediný soubor loader.php. Všechny ostatní třídy (v tomto případě třída NetteFramework) se už načtou automaticky. Paráda, že?

Kompaktní verze

Nahrávat na server framework zvící pár desítek souborů může být otravné a problematické, protože internetová připojení mají tendenci vypadnout v nejméně vhodnou chvíli. Proto se v distribuci v adresáři Nette.compact nachází i jednosouborová verze, do které se celý framework zdrcnul. Ve většině případů by měla být kompaktní verze i rychlejší. Nicméně na vývojářském počítači budeme používat vždy verzi plnou.

Můj první formulář

Zmiňoval jsem se o primitivních webových aplikacích s jedním kontaktní formulářem. K čemu nasazovat framework na jeden formulář? Když si člověk představí, co všechno takový formulář obnáší:

  • napsat rutinní HTML kód (ošetřil jsem chyby a odlišnosti prohlížečů?),
  • napsat javascriptovou validaci,
  • napsat serverovou validaci (takže totéž znovu, jen jiný jazyk, ach jo),
  • v případě chyby vypsat formulář znovu s vyplněnými políčky (nezapomněl jsem někde použít htmlSpecialChars?),
  • testovat kód, ověřit funkčnost v prohlížečích,
  • ošetřil jsem magic quotes?

Celá řada relativně jednoduchých, avšak nezáživných úkolů. Svádí člověka na něco zapomenout (často případ magic quotes, viz třeba nový web České televize), nebo práci trošku ošidit (Javascriptová validace? Nemám čas. Serverová validace? Dopíšu hned zítra). Dobrá, pomoc by se tu nejspíš hodila, tak se předveď, frameworku. A nahrát na server jeden soubor navíc nebolí.

Zkuste si napsat tento prográmek. Upozornění: skript musí být uložen v UTF-8.

require 'Nette/loader.php';

// pokud používáte verzi pro PHP 5.3, odkomentujte následující řádek:
// use NetteFormsForm;

$form = new Form;
$form->addText('name', 'Jméno:'); // name je název prvku, Jméno: je popisek
$form->addText('email', 'E-mail:');
$form->addCheckbox('promo', 'zasílejte mi reklamu');
$form->addTextArea('text', 'Vzkaz:');
$form->addSubmit('send', 'Odeslat');

echo $form; 

Vykreslí se nám následující formulář:

Jednoduchý formulář

Při kliknutí na popisky se kurzor automaticky objeví ve formulářovém políčku. Hezké, ale chtělo by to oživit. Přidat validační pravidla, zjistit, jestli byl formulář odeslán a pak hodnoty uložit do databáze.

Jedno po druhém. Validační pravidla přidáme metodou addRule(), jejíž parametry jsou typ pravidla a chybová hláška, která se zobrazí, pokud hodnota validací neprojde. Můžeme si vytvářet vlastní validační pravidla, zatím si vystačíme s předdefinovanými.

Definici formuláře upravíme do této podoby:

$form = new Form;
$form->addText('name', 'Jméno:')
        ->addRule(Form::FILLED, 'Zadejte prosím své jméno');

$form->addText('email', 'E-mail:')
        ->addRule(Form::EMAIL, 'Zadejte prosím platnou e-mailovou adresu');

$form->addCheckbox('promo', 'zasílejte mi reklamu');

$form->addTextArea('text', 'Vzkaz:')
        ->addRule(Form::FILLED, 'Napište nám prosím vzkaz');

$form->addSubmit('send', 'Odeslat'); 

Zbývá dopsat životní cyklus formuláře. Pokud je formulář odeslán (form is submitted) a je validní (is valid), data zpracujeme. Zatím jen tak, že je vypíšeme do okna prohlížeče. K tomu využijeme metodu Debug::dump(), která pole hezky v HTML naformátuje A pokud formulář odeslán není, nastavíme mu vychozí hodnoty.

Za definici formuláře tedy vložte kód:

// jestliže byl formulář odeslán
if ($form->isSubmitted()) {
        // a jestliže jsou všechny položky vyplněny správně
        if ($form->isValid()) {
                echo '<h1>Formulář byl odeslán</h1>';

                $values = $form->getValues();
                Debug::dump($values);
                exit;
        }

} else {
        // a jestliže nebyl odeslán, nastavíme výchozí hodnoty
        $form->setDefaults(array(
                'promo' => TRUE, // každý si přeje, abychom mu zaplevelili e-mailovou schránku
        ));
}

echo $form; 

Tímto máme hotový plně funkční formulář, který disponuje validací na straně klienta (tj. javascriptová validace) i validací na straně serveru.

Validace na straně klienta

Validace na straně klienta

Validace na straně serveru

Validace na straně serveru

Formulář se bude uživateli vykreslovat tak dlouho, dokud ho nevyplní správně. Poté získáme pole hodnot, kde klíče tvoří názvy jednotlivých prvků. Přičemž z textových políček jsou automaticky odstraněny levostranné i pravostranné mezery, ošetří se magic quotes, ověří se, zda jde o validní UTF-8 řetězce. Na tyto věci už nemusíme nikdy myslet.

Odeslaný formulář

Mohli bychom přidat složitější validační pravidla (například chtít platný e-mail jen v případě, že je políčko zasílejte mi reklamu zatrhnuté), mohli bychom zcela změnit způsob, jak se formulář vykreslí, přidat vlastní formulářové prvky, ale tohle všechno si necháme na jedno z příštích pokračování. Dnes už jen nakousnu, čeho se bude týkat díl příští.

Odvšivování

Během vývoje aplikací v Nette Frameworku oceníte tři užitečné věci:

Co by se stalo, kdybych v uvedeném kódu, ach já nešika, místo $form->isSubmitted() napsal $form->isSubmited()? PHP by vyhodilo výjimku:

Výjimka v PHP

Pravda, všechny důležité informace tam jsou, ale kdo se v tom má vyznat? Pozveme si tedy Laděnku, ať nám chybu ukáže po svém. Stačí do kódu, nejlépe hned za volání require 'Nette/loader.php', přidat řádek

Debug::enable(); 

(pro uživatele PHP 5.3: zavolejte buď NetteDebug::enable(), nebo přidejte NetteDebug do klauzule  use)

a najednou se výjimka zobrazí dočista v jiné podobě:

Laděnka

Laděnka si vzala slovo

To je ovšem jiné kafe, že? Chybová zpráva doslova křičí, vidíte část zdrojového kódu se zvýrazněným řádkem, kde k chybě došlo, informace Call to undefined method Form::isSubmited() srozumitelně vysvětluje, o jakou chybu jde. Celá stránka je navíc živá, můžete se proklikávat k větším podrobnostem. Zkuste si to.

Jak vidíte, Laděnka je poměrně výřečná, což lze ocenit ve vývojovém prostředí, zatímco na produkčním serveru by to způsobilo hotové neštěstí. Tam se totiž žádné ladící informace vypsat nesmí. Laděnka proto disponuje autodetekcí prostředí a pokud příklad spustíte na ostrém serveru, výsledkem bude prázdná obrazovka.

Příště se Laděnce podíváme pod sukni. Těšte se.


Autor článku je vývojář na volné noze, specializuje se na návrh a programování moderních webových aplikací. Pravidelně pořádá školení pro tvůrce webových aplikací, vyvíjí open-source knihovny Texy, dibi a Nette Framework.

Používáte Nette?

Komentáře

Subscribe
Upozornit na
guest
84 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
ZuseX4

No skvělé! Přesně to jsem ted potřeboval! Díky ti moc!

jar

Článek má styl a Nette vypadá velmi zajímavě. Doufám, že další díly na sebe nenechají dlouho čekat.

Patrik Votoček

U ukázky laděnky jsem si nemohl nevšimnout že se jedná o revizí 213 z 13.2.2009 a tak mě tak napadlo jestli u dalších částí seriálu budou brát v ohled i novější revize (často i další funkcionalitu) nebo jestli bude/je celý seriál stavěn na této revizi?

mirrec

vyzera to naozaj zaujimavo :)

tesim sa na dalsie casti serialu :)

karlik

Podle toho co jsem se docetl, tak pouzivani MVC frameworku snizuje rychlost PHP, protoze PHP musi pri kazdem requestu nacist vsechny pouzite knihovny frameworku. Zatimco treba Java, RoR maji vse v pameti?

Hoween

1) Co mi brání použít nějakou cache, např. eaccel?
2) Opravdu si nemyslím, že načíst pár kB kódu, který se neinicializuje, je pro server nějak náročné. Pro celý server je mnohem, mnohem náročnější třeba špatně napsaný SQL dotaz a špatná struktura tabulky, nevhodně udělaný Ajax, nebo špatná struktura frontendu, která generuje desítky zbytečných HTTP spojení. Proti špatně udělanému SQL je načtení X PHP knihoven opravdu nic.

Anonymní

To není tak docela pravda.
Samotné čisté PHP se na server již moc nedává. Jeho výkon lze razantně zvýšit právě pomocí "předkompilováním" zdrojových tříd a pokud kompiler zjistí, že se daná třída nezměnila, tak použije zkompilovanou a optimalizovanou třídu v paměti.

V současnosti jsou asi 2 nejpoužívanější "kompilery": ZEND Optimizer a eAccelerator.

N

dnes jiz jedine xcache, protoze je primo jako balicek v Debianu :)

Anonymní

Principiálně je to tak, v PHP (ale i RoR) se musí při každém requestu naparsovat všechny knihovny znovu (narozdíl od Javy nebo .NET).

U Rails to není pravda, v produkčním režimu se chovají podobně jako Java a .NET. Ve vývojovém režimu je k ulehčení debugování zapnuto automatické reloadování některých částí aplikace při změně odpovídajících souborů. Toto nastavení lze změnit.

Velmi podobně se chovají i další frameworky v Ruby – minimálně Sinatra a pokud vím tak i Merb.

David Majda

Uživatel si rozhodně nepřál zůstat v anonymitě…

Anonymní

RoR maji v produkcnim prostredi nastaveno config.cache_classes = true a tedy nacitaji modely, helpery i controllery pouze jednou.

alblaho

Jenom doplním, že u Pythonu (Django) se taky nic parsovat nemusí. Zaprvé se použijí soubory s bajtkódem a zadruhé mod_python drží kód normálně v paměti.

Java/.NET mají navíc JIT. I když jsem slyšel, že na youtube používají Psyco…

webdev

Tak s timhle bych si hlavu nelamal. Java ma totiz MNOHEm vetsi rezii pro spusteni toho kodu presto ze je v RAM a Ruby ac je na tom lepe nez JAVA neni zase o tolik skromnejsi. Ve vysledku (pri vyuziti Cache) je PHP o trosku rychlejsi. Navic by jiste slo celou vec resit vetsim mnozstvim mensich knihoven, ktere se budou vyuzivat jen kdyz jich je treba.
Pouzivam vlastni Framework (kdo ne ze? ;-). A od zacatku se snazim napodobovat AmigaOS (genialni zalezitost) Takze se snazim o miniaturni knihovny a co nejvetsi setreni s kodem. Zaroven, ale o jednoduchost. Treba to jednou dotahnu dokonce tak ze to pustim mezi lidi :-)).

Martin Soukup

Malý český rybníček se opět víří, protože celebrita David Grudl vydala nový framework. Není v něm sice žádná objevná myšlenka a jako one man show je sto let za světovou konkurencí, ale je náš, krásný, malý a český!

Proto všichni hurá na Nette! Geniální framework s nekvalitní dokumentací.

Hoween

Tak tak. Zatímco řada frameworků zamrzla na PHP4 a kolem objektů ani nešla, Nette už implementuje namespaces. Ale jinak je sto let za konkurencí.

Osobně mi na Nette chybí nějaká rozumná integrace na šablonovací prostředí (Smarty by bodly), ale v porovnání s takovými pomalými a obludnými monstry, jako je Zend (mimochodem, dokumentace Zendu je jedna z nejhorších, jakou jsem kdy četl), je to celkem příjemná změna.

mike

Můžu potvrdit, že integrace jiného šablonovacího systému je celkem v pohodě – Bomba i Vitalia používají náš vlastní a nebyl s tím žádný zásadnější problém.

romansklenar

Dej pár příkladů znalče, v čem je nette těch 100 let za konkurencí. Od toho kdo to prohlásí bych čekal, že v nette zkoušel aspoň něco napsat a má ho v ruce, ne jen soudit podle příkladů pro začínající uživatele, na které je tento seriál zaměřen…

Anonymní

V dokumentaci a podpore.

Ondřej Mirtes

V dokumentaci možná (ale i z té dosavadní se dá vše vyčíst a naučit), ale v podpoře rozhodně ne – na velice aktivním fóru vám zodpoví jakýkoli dotaz a vyřeší jakýkoli problém :))

Anonymní

>> ale i z té dosavadní se dá vše vyčíst a naučit

To vubec. Bez cumeni do kodu jsem toho z dokumentace moc nepobral.

>> na velice aktivním fóru vám zodpoví jakýkoli dotaz a vyřeší jakýkoli problém :))

Dost silne tvrzeni. Kolik existuje firem nabizejici komercni podporu pro Nette? Mimoto, pod podporou si predstavuju i nejakou tu zaruku budouciho vyvoje, one man show mi moc jistoty nedava.

BTW: To, ze posledni verze vyzaduje PHP 5.3 (vyzaduje/nevyzaduje nechci resit) je pouze kvuli namespace nebo to ma i nejaky nekosmeticky duvod?

Ondřej Mirtes

Já myslím, že vše je tam vysvětleno dost detailně (quickstart, jádro NetteApplication, další pomocné třídy), chce to akorát čas na pochopení.

Aktivní fórum – ano, pro veliké firmy, které přemýšlí nad přechodem na Nette, se to může zdát jako nedostatečná podpora a podpora od komerčních firem by byla dobrá, toto nechám na ostatních, nerad bych Nette dělal i nechtěnou negativní reklamu, navíc jako člověk, který v tom udělal zatím jen dva weby.

Ale svými myšlenkami a postupy se líbí, je to malé, české, roztomilé a přitom velké a efektivní. Nechcete? Nepoužívejte.

Martin Soukup

Je nějaký důvod (kromě těch nacionalistických), používat framework z České republiky? Nebo snad jsou na tom programátoři už tak špatně, že musí mít všechno v češtině?

Zatímco tady je to možná marketingová bomba, ve světové konkurenci je to bohužel jen naleštěná one man show.

Tomáš Jukin

Žádná naleštěná one man show – takhle může mluvit jen člověk, kterej o Davidoví ví, že je osobnost, ale nezná jeho PHP skill. A jestli chce někdo vysvětlit, jakej má David PHP skill, rád sem postnu spoustu příkladů;-), co Howeene, Martine Soukupe? Někdo další?

Hoween

Nějaký důvod, proč si berete do huby mě?

Tomáš Jukin

Mám sem dát seznam odkazů?;-)

Anonymní

a Grudlovo PHP skill snad mění něco na tom, že je to "naleštěná one man show"?

tomik.vitek

Tak a máme nový slogan pro Nette: "Nette – naleštěná one foundation show", pro anglicky mluvící "Nette – a polished one foundation show", popř. pro rusky mluvící "Нетте – полированная один институт шоу". :)

P.S.: Že se nestydíš takhle kopat do konstruktivně krituzujících čtenářů Tvého článku! Nezapoměň, bez nich jsi nic, to jim dlužíš, za to co jsi! :) Aneb já bych všechny ty internety a Nette zrušila!

Martin Soukup

A copak to je, ta "Nette Foundation"? Že by něco jako "Institut Školení PHP"?

Za "PHP Skilled Professionals Institut" tě zdraví Martin Soukup. Takových subjektů si dokážu vymyslet taky desítky :)

Anonymní

Tak jsem se schválně podíval kolik lidí z "Nette Fundation" postuje do svnka oproti dvoum dalším jmenovaným…a…není ti v tvé nadaci smutno Davide? :P

Anonymní

Nojo, ale třeba institut Potencier znamená xx aktivních lidí v svnku…proto nedůvtipný troll(pomlouvačná šlapka) asi narážku nepochopil(a).

Také autor nejspíš nepochopil(a), že pro slaboduchého komentátora jako jsem já, je vážná hudba příliš nóbl, ostatně zajímá ho asi stejně jako Kristelová s Blažkovou…

Anonymní

> Silné tvrzení? Ale kdeže…
Heled, nechci chodit do extremu, ale znamena to ("vyresi kazdy problem"), ze mi lidi z fora i naprogramuji veci, ktere potrebuji a ktere chybi?

> Není jiný PHP framework, který má v České republice aktivnější fórum nebo více firem nabízejících komerční podporu, než má Nette Framework.

Tohle je (asi) pravda, ale je to pro me relevantni stejne jako fakt, ze v Lesothu je nejpopularnejsi Symphony.

> (samozřejmě chápu, že si chcete kopnout a rozumná argumentace nemá smysl, proto taky odpověď nepatří vám, ale potencionálním uživatelům frameworku)
Kopat nepotrebuji, jen jsem chtel poznamenat, ze jsou i jine velmi dulezite veci nez kvalita kodu … a v tom Nette znacne ztraci.

tiso

> jsou i jine velmi dulezite veci nez kvalita kodu … a v tom Nette znacne ztraci.

Nejaký príklad? Nezastávam sa žiadnej strany, ale skús argumentovať. Inak sú to len prázdne kecy…

Anonymní

Vzdyt jsem o tom mluvil – dokumentace, podpora (tyhle dve pokud clovek rozumi nejakemu svetovemu jazyku), mnozstvi jiz hotovych integraci s jinymi OSS projekty, hotove specializovanejsi moduly atp.

romansklenar

Ano v dokumentaci chybí detailní popisy složitějších věcí, ale co sleduju fórum tak i lidi co s žádným frameworkem dosud nedělali nemají problém z ní pochytit to podstatné a napsat v nette web. Argumentace typu "musím se podívat do zdrojáků, tudíž je dokumentace na prd" je podle mě blbost. Kdo chce využít všech možností jakéhokoliv frameworku nebo jej plně pochopit, bude se muset na střeva dřív nebo později podívat. Ale na dokumentaci je pořád co zlepšovat, to je pravda…

Nevím co si představujete pod podporou, ale na fóru je dost lidí, kteří jsou ochotní obětovat trošku svého času a pomoct když jsou toho schopní.

karmi

Co prosímváspěkně *tohle* znamená? Znáte nějaký současný, hojně rozšířený a použávaný webový framework s "objevnými myšlenkami"?

Např. Ruby on Rails, které tak trochu znám, obsahují 0% objevných myšlenek už od počátku.

Zcela naopak, jejich síla je právě v *neobjevování* myšlenek, ale v jejich elegantní implementaci. MVC architektura (70. léta), objektově-relační mapování (ActiveRecord, Martin Fowler, 2002), RESTful architektura (Roy Fielding, 2000), generátory kódu (např. Hunt/Thomas, 1999), … to vše jsou staré koncepty. Samozřejmě, dobrodruzi mohou zkoušet http://www.seaside.st, ale o to se tady asi nejedná?

Navíc soudě třebas *jen* dle informací v článku je tvrzení o "sto letech za světovou konkurencí" takové … nejasné. Měl byste nějaký příklad nebo jen tak klasicky po česku haníte?

(Díky Davidovi i Zdrojáku za poutavě napsaný a přínosný článek. Těším se na další. K PHP se asi nevrátím :), ale čtení je to moc pěkné.)

–karmi

danaketh

Všichni ti Grudlové, Dentové a Pixiové že? Kvůli nim jsou tvoje internety 100 let za světovou konkurencí.

Já to vidím tak, že David alespoň něco dělá a snaží se z toho prašivého PHP udělat rozumně použitelný jazyk při jehož užívání si programátor nevyrve zbývající vlasy. Nette je při svých schopnostech snad nejmenší a nejrychlejší framework co jsem zkusil. A že má/nemá dokumentaci? On ji někdo čte? Já jsem za ty roky dospěl k přesvědčení, že dokumentaci čte jen pár bláznů a ti ostatní buď jedou metodou pokus/omyl nebo se prostě dojdou zeptat do diskuse k danému frameworku. A ta je zrovna v případě Nette poměrně živá.

A ne, nepoužívám Nette, byť jsem v něm začal dělat první nesmělé krůčky :)

Někdé tu mám pěkný obrázek trolla. Třeba bys ho ocenil až zase budou měnit občanky ;)

Martin Soukup

Proč ohýbat neschopný jazyk a přepisovat framework (a zdrojáky vlastních projektů) s každou desetinkovou verzí? Máme tu lepší jazyky a ještě lepší frameworky.

danaketh

Framework by měl zrovna to přepisování vlastník zdrojáků odstínit.

Nějak nevím proč v příspěvcích nejprve zmiňujete "světovou konkurenci" a potom hodíte všechny PHP frameworky do jednoho pytle s tím, že PHP je beztak na prd :)

Ty lepší jazyky jsou které? Perl, Python, Ruby? U nás vcelku mimo mísu, pokud člověk nestráví týden hledáním hostingu který je podporuje :)

Martin Štěpař

A proto pojďme a všechny ty PéHáPkáře a Nette frejmworkáře naučme používat něco jiného. Když jim to vysvětlíme, když dáme pádné argumenty, dyk to musí pochopit, že jo? Já jim o tom klidně budu přednášet, že jo, jakej je ten Grudl hroznej člověk, zlej, pitvornej a hamižnej, jak si myslí, kdo ví jak není dobrej, kluk jeden nedomrlej, jak von se jen v PHP lopotí, v té zhoubě internetového světa, a po nás ostatních snad chce, abychom se přidali, abychom to jeho Nette začali používat. Prostě jim to tak řeknu. To by musely být naprosté trubky, aby to nepochopili.

romansklenar

Kéž by to bylo tak jednoduché ;) Jednotliví lidi to snad pochopí, ale firmy? Jak přesvědčit firmy aby investovaly peníze pro přechod jiný jazyk? Většina firem jde jen za ziskem, a to v php jde docela dobře, pracovní síla je tu levná, když v něm web dokáže zbastlit 14letý studentík. Proč platit profíkovi 300kč/h, protože píše v ruby a ne studentovi 60kč/h, když je výsledek stejný? Pak jsou tu samotní vývojáři, pro kteří se raději naučí to, kde mají větší šance k zaměstnání v php než v např. v ruby. A tahle mentalita se asi ze dne na den nezmění… Stejně jako je u nás ICQ výhradní záležitost, i množství webů napsané v php je u nás nejpíš o dost vyšší než ve světě, přestože je to hrozný jazyk a vyvíjí ho banda hlupků.

Pokud ale někde plánujete hromadné přezbrojování z php na ruby nebo python rád se ho zůčastním :) sám se už několik měsíců snažím marně dokopat se je začít učit.

Ondřej Mirtes

Nic takového se neděje. A ukažte mi jazyk, se kterým se nemusíte omezovat při výběru na pár konkrétních hostingů.

Hoween

JavaScript? ;-)

danaketh

Jůůů, a omluva Pixymu za to měkké "i" :)

John

… a nesnažte se plést bič z něčeho, co k tomu není vhodné. Je třeba si uvědomit, že PHP má díky svému návrhu či spíše jeho nepřítomnosti svá omezení, která nelze sebelepším frameworkem překonat a u větších aplikací se pak efektivita zkrátka nedostaví ;-)

shMoula

diky, myslel jsem, ze vsichni vyvojari v php jsou tak zahledeni, ze jej obhajuji vzdy, vsude a na vsech postech. holt jsem se spletl ;-)

Lukino

Mozete prosim doporucit v com programovat enterprise aplikacie?

som zacinajuci programator…

Dakujem

Hoween

Pokud myslíte J2EE, tak Eclipse + Jboss.

shMoula

nerekl bych, ze existuje univerzalni reseni vhodne pro vsechny, at uz se jedna o pozadavky, zvyklosti, nebo vec vkusu. ja pouzivam Java Enterprise Edition, dalsi lide urcite doporuci neco jineho.

registrovaný uživatel

Pokud jste zacinajici programator, tak bych Vam nedoporucoval programovat enterprise aplikace.

shMoula

taky pravda, tohle me vubec nenapadlo :-)

Lukino

mno skusenosti su… nieje to take zeby som nikdy nic nenapisal… ale nepisal som este enterprise aplikacie… kazdopadne mam na nieco zalusk… cca 100 uzivatelov strojarska firma… len neviem akym smerom sa mam vyddat…

dakujem za kazdu radu =)

Ferda

Co je enterprise aplikace?

Architekt

To jsou aplikace pro systémy kosmické lodi Enterprise ze seriálu Star Trek. Nebo ve většině případů by klidně mohly být…

webdev

Inu co na to rict?
"Zijte dlouho a blaze!"

Observer

To mi něco připomnělo:
V USA porovnávali Linux a operační systém, který používají na raketoplány a zjišťovali, který je stabilnější a míň padá. Zjistilo se, že systémy na raketoplánech padají méně, zato ale z větší výšky:)

andrejk

cakephp v bledomodrom
ale na prve to vyzera celkom ok
asi to na nejakom malom projekte – napr. web lokalnej restauracie ;) skusim

YangombiUmpakati

Nette je super a David je borec!

eclipse_guru

Co je to za pěkné GTK+ téma? Líbí se mi. Nejsou to náhodou Visty?!?

Aleš Roubíček

Ne, Royale – Windows XP Media Center Edition 2007

ja

Grudlova one man show je sice krásná a pochopitelně nejrychlejší když neimplementuje žádnou databázovou logiku, o scafoldingu si může nechat leda zdát. Za Railsema, Djangem i Symfony zaostává Nette pár let a dovolím si říct, že je komplexností ani nikdy nedožene – což nemusí být nutně špatně, nicméně pokud už se někdo chce táhnout za produktivitou programátora měl by šáhnout jinam.

Anonymní

Sleduji Nette už pár let a líbí se mi jeho elegantnost narozdíl od Zendu. Určitě v něm něco většího udělám (asi nějakou "enterprise aplikaci" :o) Každopádně, když si projdete většinu jiných frameworků, tak jsou slabší a většonou jsou to molochy, kterým bych se nesvěřil. Díky Davide!
K tomu flame na téma programovací jazyky pro web, trochu nechápu máte proti PHP. Objektový model je už celkem OK, dokumentace použitelná, táhne si jen dědictví starých verzí… jasně vznikal kvůli něčemu jinému než Java, takže pro svůj účel je OK. Rozhodně na web bych já zase nepoužil Javu, se kterou jsou zde jen problémy, je to úžasně pomalé a celková elegance složitého kódu pro mě není důvod ji zde používat. .NET je trošku černá skříňka, ale jinak pěkné, Ruby není tak úplně pro začátečníky, na Python neseženu hosting. PHP je prostě jazyk, který se naučíte nějak za chvíli a je jen na vás jestli budete bastlit scripty nebo psát aplikace. Vzpomeňte si jak prasácky jste psali v Pascalu, ale fungovalo to a byly v tom i ekonomické systémy.

Anonymní

Vidis to, jini se tem "molochum" radi sveri… (Symfony – Yahoo Answers, del.icio.us, DailyMotion, TED…)

Gerlige

Konečně jsem se rozhodl vyzkoušet taky nějaký PHP framework, a proč zrovna né od českého vývojáře, obzvlášť, když o něm právě vychází na Zdrojáku seriál. Takže jsem si článek přečetl a s nadšením, jak mi Nette ulehčí práci, okamžitě stáhnul verzi: Nette Framework 0.8 pro PHP 5.2 a pro začátek vyzkoušel příkladový kód z článku.
Ovšem po spuštění se naskytla drobná (pro uživatele asi dost podstatná) chyba, totiž vadně vypisované js hlášky, kdy se vypíše jen několik prvních znaků z oné hlášky.

Pro ilustraci předkládám screen.

Martin Hassman

Tipoval bych, ze soubor nebyl ulozen v UTF-8, jak bylo zduraznovane v clanku. Je to ono?

Gerlige

Omlouvám se, samozřejmě máte pravdu.

Martin Petrů

Nebude to chybně nastaveným kódováním, když se to ořízne před znakem s diakritikou?

atheiste

Líbí se mi myšlenka malého a rychlého MVC frameworku. Pokud začínající programátor (to jako já ;-) ) píše pouze malé weby, chce je psát MVC a nechce "chodit s plamenometem na komára", pak potřebuje nějaký malý framework pro začátek. Nette vypadá jako přesně taková věc. Ideální by bylo, kdyby při vývoji autor oddělil a ukončil větev, která umí základní věci a tu nechal pro malé vývojáře na malé weby jako užitečnou pomůcku pro rychlejší vývoj.
Vypadá totiž náramně dobře :)

neo

Zdravím. Mi ten příklad nefunguje dobře. Zobrazí se formulář, javascript valid jde, ale po odeslání formuláře se už neukáže nic. Prázdná stránka. Mám to celé na lokálu, tak nevím jestli to není špatným nastavením Apache, ale jak jsem to tak zběžně projel, tak v tom by neměl být problém. Navíc jsem zkusil přečíst $REQUEST["name"] a to vypsalo zadané data. Pak jsem zjistil, že běh php zhavaroval v $form->isSubmitted(), ale žádnou konkrétní chybu jsem z toho nedostal ani po zapnutí tzv. Laděnky. Ta maximálně dobře zafunguje a nahlásí chybu, když např. to jméno funkce napíšu špatně, ale když je všechno ok, tak jen php zkončí a je jedno jestli je podmínka zplněná ($form->isSubmitted()) nebo ne, nic se pak už nevykoná. Tak prosím o radu v čem je problém.

Daan

Na prvy pohlad mi to pripada tak, ze sa zjednodusuje maximalne praca s HTML
kodom (osetrovanie atributov.)

Samozrejme idem sa pustit aj do dalsich dielov a uvidim, aky nazor si
nakoniec vytvorim, pretoze s frameworkom sa teraz stretavam prvy krat.

So sa tyka PHP, tak validacia ukazana na priklade mi tiez nepride ako nejake
velke zjednodusenie, sice je tam trosku menej pisania, ale v PHP som asi
zvyknuty na striktny zapis podmienok.

Napriklad tam nikde nevidim moznost vyberu medzi javascriptovym vypisom a
serverovym. Alebo to nutne funguje tak, ze pokial je povoleny JS, tak bude JS a
pokial nie, tak nastupi PHP? Dufam, ze odpoved najdem v dalsich dieloch, nie
len na toto, ale aj napriklad na moznosti formatovania tychto vypisov.

Clanok je to vsak naozaj na urovni.

Radecek

Ahoj,

stahl jsem si nette 0.9 z nette.org pote rozbalil adresar nette do slozky kde je index a opsal kod z navodu:
<?php
require ‚Nette-minified/loader­.php‘;

echo Framework::VERSION;
?>

A stejne mi to zahlasilo chybu ze class Framework neni. Nevite kde je chyba?

:)

Zkus napsat místo „Framework“ „NFramework“… nejspíš jsi stáhl špatnou verzi nette

David

Ahoj,
super článek. Jen by mě zajímala jedna věc a to proč neuvádíte do jakých souborů se mají ty kody (scripty) ukládat. Já potom jako naprostý laik jsem z toho zmatený a po prvním článku až dvou vždy to téma opouštím jelikož si s tím nevím rady kam to mám vložit aby mi to fungovalo.

?

Článek by byl super, kdyby to hned fungovalo. K ukládání – vytvořil jsem si vlastní složku a do té je zkopíroval adresář Nette. Poté první příklad by pro aktuální verzi Nette (http://files.nette.org/releases/2.0/NetteFramework-2.0.8-PHP5.3.zip) měl vypadat takto:

Nevím proč tam má být to „Nette\“, ale bez toho to nejde. Druhý příklad mi zatím nejede, protože:
Fatal error: Class ‚Form‘ not found in
nebo
Fatal error: Class ‚Nette\Form‘ not found in
:-(

?

// zde prosím uveďte skutečnou cestu ke složce Nette uvnitř distribuce
require ‚Nette/loader.php‘;

// pokud používáte verzi pro PHP 5.3, odkomentujte následující řádek:
use Nette\NetteFramework;

// vypíše číslo verze, v současnosti to je 0.8
echo Nette\Framework::VERSION;

?

Ve druhém příkladu musí být:
use Nette\Forms\Form;
a ne:
use NetteFormsForm;

?

a místo:
Debug::dump($values);
má být:
Debugger::dump($values);

Karel

Mám verzi php 5.3 a nejde mi to zprovoznit.

     require 'Nette/loader.php';
   use NetteFramework;

Framework::promo();

Mi to hodí chybu

Warning: The use statement with non-compound name ‚NetteFramework‘ has no effect in C:\xampp\htdocs\nette\priklad.php on line 3

Fatal error: Class ‚Framework‘ not found in C:\xampp\htdocs\nette\priklad.php on line 4

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.