spájame
slovenskú
IT komunitu
pridaj sa
Registrácia · Login

Matúš Koprda 6.12.2010, článok je súčasťou seriálu Ako sa stať PHP ninja s Yii Frameworkom
Hodnoť článok:
2 0

Ako sa stať PHP ninja s Yii Frameworkom (1)

Ak vás omrzelo zdĺhavé písanie opakujúceho sa kódu stále dokola, určite by ste mali vyskúšať nejaký ten framework. Staré japonské príslovie hovorí, že Yii je jedným z najrýchlejších PHP frameworkov pre vás aj pre server.

Tento tutorial je o PHP frameworku, takže pre jasné porozumenie je dobré mať aspoň základy v PHP, SQL a vedieť približne ako fungujú webové stránky.

Čo sú frameworky

Predstavte si náhodnú tetu účtovníčku vo veľkej korporácií ako sedí pol dňa za Excelom a manuálne prepisuje stovky riadkov políčko po políčku. Keby tak vedela, že existuje taká záhadná vec ako sú makrá a celú túto robotu mohla mať za chvíľu. Frameworky sú takou záhadnou vecou pri programovaní - zautomatizujú opakujúce sa úlohy a neskutočne urýchlia vaše kódenie.

Klasickým príkladom repetitívnej úlohy je kontrola správneho vyplnenia formulára a uloženie týchto validovaných dát do databázy. Je to pomerne jednoduchý problém, ale ak ho máte kódiť v čistom PHP od nuly, celkom určite vám zaberie kopec času. Navyše sa v bežných webových aplikáciách vyskytuje riadne množstvo formulárov, takže v konečnom dôsledku by ste strávili väčšinu času serkaním sa s formulárikmi.

Každý správny ninja by mal používať frameworky, keďže poskytujú knižnice tried napísaných pre konkrétne bežné problémy ako je spomenutá validácia formulárov, prístup do DB, modul na prihlasovanie používateľov, "multijazyčnosť" (i18n), filtrovanie dát, atď. Všetkých týchto problémov vás viac menej zbavia a vy sa venujete iba samotnému kreatívnej časti programovania. Pre predstavu o tom ako dokážu urýchliť vývoj - Matthew Inman, šialenec stojaci za theoatmeal.com spravil v CakePHP komplet dating stránku za 66 a pol hodiny. :)

Prečo Yii

Yii (skratka Yes it is!, vyslovuje sa [ji:]) je postavené na filozofii Convention over Configuration, čo znamená, že máte k dispozícií stavebné bloky, ktoré sa správajú tak, ako by ste od nich čakali (t.j. konvenčne) a iba ak chcete špecifické správanie, musíte ich dodatočne konfigurovať. V ideálnom prípade vyskladáte z týchto blokov celú aplikáciu s minimálnymi zásahmi do ich konfigurácie.

Yii ide ešte ďalej a jeho hlavnou feature je generátor kódu, vďaka ktorému stačí navrhnúť schému databázy a po pár kliknutiach a trocha úsilí máte vygenerovanú skoro celú aplikáciu! Určite nie úplne celú, ale pokiaľ viem, tak Yii spomedzi frameworkov zašlo najďalej.

Pre porovnanie s Codeigniterom, o ktorom kecalo Yablko (viď videotutoriál), Yii je určené na extrémne rýchly vývoj bežných aplikácií, Codeigniter skôr ako pomocník na špecifickejšie projekty.

Frameworky, založené na princípe CoC (CakePHP, Symfony, Zend Framework, ...), majú väčšinou tú nevýhodu, že sú relatívne pomalé (v zmysle, že zaťažujú server). Rýchle frameworky zase toho až tak veľa nedokážu. A tu prichádza ďalšia konkurenčná výhoda Yii - je založené na CoC a zároveň je rýchlejšie ako skoro všetky najpoužívanejšie frameworky. Taktiež je logicky štruktúrované, má použiteľnú dokumentáciu a ako bonus má generátory kódu, takže nič nemusíte písať úplne od začiatku.

Nevýhodou oproti porovnateľnému a zabehnutému CakePHP je fakt, že Yii je podstatne novšie a teda nemá až takú živú komunitu, také množstvo rozšírení, ani takú kvalitnú dokumentáciu. Tú sa budú tieto tutorialy snažiť vynahradiť tým, že si povieme všetko potrebné pre rýchle písanie kick-ass aplikácií. ;)

Let's get started

1) Ako to už chodí, v prvom rade treba Yii stiahnuť (http://www.yiiframework.com/download/) a rozbaliť do webového adresára vášho servera. Pre ľahšiu manipuláciu premenujeme "yii-1.1.5.r2654" (alebo akú verziu máte) na "yii".

2) Na začiatku je dobré si overiť, či váš server spĺňa požiadavky frameworku. Ak máte framework v hlavnom adresári webservera, stačí vytočiť adresu http://localhost/yii/requirements/. Pokiaľ tam nevidíte nič červené, váš server je hoden spustiť Yii ;)

3) Nasleduje možno trocha obskúrny krok - treba vygenerovať prvotný kód vašej aplikácie (na jednej Yii inštalácií ich totiž môže byť veľa), čo sa robí pomocou príkazového riadku. Ak vás to upokojí, takéto haluze treba stvárať aj v legendárnom Ruby on Rails a vôbec to nie je také zložité ako to možno znie. :)
V príkazovom riadku sa treba nastaviť na miesto kde ste rozbalili Yii (napr. C:\Program Files\wamp\www) a spustiť

"C:\Program Files\wamp\bin\php\php5.3.0\php.exe" yii/framework/yiic.php webapp .

Cesta sa môže líšiť, pokiaľ nemáte WAMP aodku na konci môžete nahradiť akoukoľvek zmysluplnou cestou - napríklad ak by ste túžili mať aplikáciu v podadresári "brmbrm" namiesto hlavného adresára, treba napísať

"C:\Program Files\wamp\bin\php\php5.3.0\php.exe" yii/framework/yiic.php webapp brmbrm

V OS X, Linuxe a iných Unixoch by malo stačiť

php yii/framework/yiic.php webapp .

V tomto momente sa môžete ísť kochať práve vytvoreným základom vašej novej aplikácie.

Ako to funguje

Yii je podobne ako väčšina frameworkov postavená na osvedčenom tradičnom princípe samurajov - Model View Controller (MVC). Model zabezpečuje získavanie a ukladanie dát (najčastejšie z/do databázy), View je šablóna podľa ktorej sa dáta zobrazujú a Controller je akýsi hlavný prvok, ktorý sa zavolá ako prvý, vytvorí potrebný model a view-u z neho odovzdá vhodné dáta (prípadne odovzdá celý model). Controller taktiež vykonáva akékoľvek obslužné akcie ako je odosielanie mailov, ukladanie údajov prostredníctvom modelu, presmerovania, atď.
MVC pekne separuje rozdielne funkcie, takže nech máte hocijako zložitý kód, dá sa v ňom v pohode orientovať.

Tiež je bežným zvykom, že sa volá výlučne index.php a stránka sa vygeneruje na základe cesty v URL. V základom nastavení to vyzerá tak, že voláte napríklad http://drist.sk/index.php?r=users/edit/1 a keď sa pohráte s Apachom, môžete mať peknú cestu v tvare http://drist.sk/users/edit/1. Na základe tejto cesty framework vyhľadá controller, zavolá v ňom "akciu" a controller sa postará o zvyšok.

Ďalšou charakteristickou črtou moderných frameworkov je trieda na jednoduchý prístup k DB - ActiveRecord (v iných frameworkoch sa môže volať aj ORM). V podstate jej zadáte názov tabuľky, ona rieši všetko za vás a SQL píšete len keď už ide fakt do tuhého. :) V praxi to vyzerá takto:

$model = new Pouzivatel();
// Yii vyuziva samonacitavanie suborov s triedami, takze uz ziadne require!
if ($model->find(array('meno' => 'lolofon%')))
{
	$model->datum_pristupu = time();
	$model->save();
}

Aby ste vedeli čo kde hľadať, tu je stručná štruktúra dôležitých adresárov:

/assets - súbory využívané browsermi - napr .js, .swf, ...
/css - css-ká pre stránku a súvisiace obrázky
/protected - kód vašej aplikácie
	/components - všeobecné pomocné triedy
	/config - obsahuje konfiguráciu DB a iných komponentov aplikácie
	/controllers - controllery
	/data - na začiatku obsahuje testovaciu databázu SQLite
	/extensions - sem sa kopírujú stiahnuté rozšírenia pre framework
	/messages - sem idú súbory s prekladmi
	/models - modely
	/runtime - dočasné dáta ako cache a log
	/views - viewy
		/layouts - šablóny celej stránky (normálna, so stĺpcom na boku, ...)
		/... - podšablóny patriace ku controlleru ...Controller
/yii
	/demos - demo aplikácie - užitočný je hlavne ten blog
	/framework - kód jadra
	/requirements - to sme už skúšali

Najlepšie je preskúmať a pohrať sa trocha s vygenerovanými modelmi viewmi a controllermi, aby ste si osvojili fungovanie Yii.

Konfigurácia

Pravdepodobne budete chcieť používať databázu a vyskúsať ten magický generátor kódu, takže si povieme ako ich nakonfigurovať.
Defaultne je už v konfigurácii nastavená ukážková SQLite databáza a ak chcete Yii len vyskúšať, môžete ju nechať tak. Pokiaľ plánujete použiť vlastnú DB, zakomentujte SQLite a odkomentujte MySQL. Konfigurácia je v súbore /protected/config/main.php, kde treba odkomentovať aj "Gii" (modul generátora kódu) a nastaviť prístupové heslo k nemu. Pre Gii taktiež treba vypnnúť filter IP adries, ktoré k nemu môžu pristupovať parametrom 'ipFilters'=>array('*'),, ak k nemu nepristupujete iba z localhostu.

A teraz to najdôležitejšie...

Gii nájdete na adrese http://localhost/index.php?r=gii , kde treba zadať zvolené heslo a najskôr vygenerovať model(y). Vo vzorovej databáze je jedna tabuľka s názvom tbl_user a poľami id, username, password, email. Pre ňu treba vyplniť formulár nasledovne:

Kliknite na preview a potom generate.

Ďalší budeme generovať CRUD kód. Je to skratka od Create, Read, Update, Delete, čo sú operácie, ktoré budeme môcť s tabuľkou cez našu aplikáciu vykonávať. To je práve to, čo väčšina informačných systémov potrebuje robiť a to, čo trvá v čistom PHP spraviť tak ukrutne dlho.

Po úspešnom vygenerovaní odporúčam kuknúť na admin tabuľku (http://localhost/index.php?r=user/admin), ktorá dokáže vyhľadávať a triediť dáta cez AJAX (login je admin/admin). Pri pridávaní nových prvkov do tabuľky a editovaní existujúcich samozrejme funguje validácia formuláru, ktorej pravidlá sa dajú veľmi jednoducho upravovať.

Takto jednoducho si môžete vygenerovať CRUD interface pre všetky tabuľky. Možno sa vám zdá byť základná šablóna trocha nepraktická (napríklad mne by prišlo ako logické mať čisto len "admin" zoznam), ale našťastie sa dá ľahko meniť. Ako, to si povieme nabudúce. :)
V ďalších tutorialoch sa dozviete aj ako zobrazovať údaje z viacero tabuliek naraz (cez JOINy), ako poriešiť prihlasovanie používateľov podľa údajov z DB, ako používať widgety (datepicker, autocomplete, ...) a kadečo iné.

Ďalšie časti seriálu Ako sa stať PHP ninja s Yii Frameworkom nájdeš tu:
dev > Yii

P.S.: Ak sa ti tento framework zdá veľmi zložitý, pozri si naše video lekcie k frameworku CodeIgnitor na Zajtra.sk.
Matúš Koprda Matúš Koprda

Momentálne robím internety a keď budem veľký, snáď sa dostanem aj k hrám alebo niečomu zmysluplnému. :) Mám rád minimalizmus, obskúrnu hudbu, všetko geeky a rýpanie sa v detailoch. Ďalšie kecy odo mňa nájdeš na brm.sk a na Twitteri @blade_sk.


Hodnoť článok:
2 0

10 komentárov k článku:

Komentovať môžu iba prihlásení

Zaregistruj sa cez bezplatnú registráciu alebo použi login cez Facebook (FB Connect)

Prihlás sa tu, ak už máš profil na Zajtra.sk:


Zabudol som heslo

0 0 Adam Kabac 24.7.2013 13:09:17
frasa tam nemôžu to spraviť bez toho posraného príkazového riadka ? je to tak zbytočné a neviem prečo ale môj windows odmieta otvoriť zložku yiic ...
0 0 Mikhael 7.2.2012 22:29:32
už som to vyriešil :) [screenshotuploader.com/i/01/odRt6lnM3.png]
0 0 Mikhael 7.2.2012 21:54:49
Nemôžem sa pohnúť dopredu pri vytváraní prvej aplikácie, nakoľko vždy dostanem tú istú chybu. [screenshotuploader.com/i/01/RXqf9X06.png] Skúšal som to najprv s VertrigoServ, teraz s Wamp a vždy to isté. atribúty by mali byť v poriadku [screenshotuploader.com/i/01/fjemS1bBW.png]. Čo mi ušlo?
0 0 Matej Šajgal (fb) 5.5.2011 00:00:00
@Pan Inkognito
Kniha pri Nette nema vzhladom na jeho rychli vyvoj ziadnu hodnotu. A generator kodu? :D To by som nepovazoval za "cool" nastroj bez ktoreho sa neda existovat. Programator by mal byt generator kodu, nie? :) Ale dokumentacia chyba aj mne, na druhej strane vyvazuje tento nedostatok kvalitne forum, kde vsetci radi poradia.
0 0 Pan Inkognito (fb) 29.1.2011 00:00:00
@Igor Hlina
A kde má Nette kvalitní dokumentaci, screencasty, knihu a generátory kódu?
0 0 Juraj Kundrik (fb) 22.12.2010 00:00:00
Pan genialny jaksi zabudol napisat ze Yii sa nema rado s restricted mode a ze ma zly zvyk zapisovat si do adresarov. Pre mnohych ludi, ktory nevlastna servery to predstavuje problem o ktorom by sa bolo dobre aspon zmienit.
0 0 Igor Hlina (fb) 9.12.2010 00:00:00
Miroslav Mašat napisal:
"nette je prakticky velmi podobne ako Codeigniter"

Absolutne nesuhlasim. CI je strasne jednoduchy FW, ktory dokaze skuseny developer prejst cely za jeden vecer. S komplexnostou Nette sa nemoze ani nahodou rovnat.

Co sa tyka porovnania Yii a Nette, oba FW su velmi podobne co sa MVC enginu tyka. Dispatch requestu je velmi podobny, rozdiely v prospech Nette sa zacinaju ukazovat az po vstupeni vykonavania kodu do akcie. Koncept Nette View sablon nema konkurenciu, ako aj napad s vykresitelnymi komponentmi s moznostou posielat im subrequest pod prahom hlavneho requestu (toto mi v Yii velmi chyba).

Nette je o nieco rychlesie ako Yii (zda sa mi, ze Yii ma v dispatch loop omnoho viac kodu, aj ked so ZendFW v1.x sa nemoze porovnavat). Nette ziskava cenne ms na kesovani zozanmu tried (Robotloader - genialna pomocka) a sablon (latte sablony sa kompiluju do nativneho PHP).

Treba si vsak uvedomit, ze hlavne bottlenecky webaplikacii su v praci s data source (databaza, vzdialene datove zdroje) a samotne prebehnutie MVC enginu zabera z celkoveho casu tak 5% max.
0 0 Michal Komar (fb) 7.12.2010 00:00:00
Chcel som položiť tú istú otázku ako pán Gluchman. Mám ale ďalšiu. Aká je rýchlosť Yii v porovnaní s Nette?
0 0 Miroslav Mašat (fb) 7.12.2010 00:00:00
nette je prakticky velmi podobne ako Codeigniter
0 0 Tomáš Gluchman (fb) 6.12.2010 00:00:00
A aké je Yii v porovnaní s Nette?
Zajtra.sk > Programovanie > PHP > Ako sa stať PHP ninja s Yii Frameworkom (1)


Kritika

Vieš ako robiť veci lepšie? Pomôž našim odvážnejším členom a skritizuj im projekty!

Reklama

Seriály zo Zajtra.sk

Reklama