A Yiituts ötlete még 2012 év elején született, amikor a saját Yii alapú CMS rendszerem fejlesztése során összegyűlt tapasztalatokat szerettem volna megosztani cikkek/tutorialok formájában. Tovább gondolva rájöttem, hogy jó lenne egy kisebb közösségi funkciókkal rendelkező, magyar Yii fejlesztőket összegyűjtő oldal létrehozása. A "yiiframework.hu" domain sajnos már foglalt volt, így összeállt az oldal fő profiljára utaló Yiituts elnevezés.
Showing posts with label mvc. Show all posts
Showing posts with label mvc. Show all posts
Friday, March 22, 2013
Magyar Yii Tutorial oldal
Nemreg indult a magyar nyelvu YiiTuts.hu oldal.
Wednesday, February 29, 2012
Az Art-Work.hu története (Murányi S.)
Az Art-Work (http://art-work.hu) története 2007-ben kezdődött el, amikor egy szakdolgozat témájaként jött létre. Mivel én magam is szeretek fotózni, így nem csak a szakdolgozat viszonylag hamar kikerült a netre (deviantart, stockexpert ihletésére). Reklámozni akkoriban csak iwiw-en reklámoztam, illetve készült pár száz szórólap, amit pár városban művészeti iskolákban szórtunk ki.
2007-2009 -ig három verziót élt meg az oldal. A verzió váltás okai a szakmai fejlődésem volt elsősorban.
Az első nagyobb lépés a 2009-ben PRADO-ra váltás volt, amikor már némi web2 is bekerült az oldalba, és mégis csak egy összeszedettebb rendszer volt, mint az addigiak. A PRADO-t nagyon szerettem, mert jó volt használni, megvoltak a megfelelő dolgok, nem kellett semmiben feltalálni a spanyol viaszt.
2009-2011-ig sajnos nem nagyon volt foglalkozva az oldallal az akkori munkahelyem miatt, ezért a felhasználói bázis szép lassan el is felejtette az oldalt. Így az addig összegyűlt 1000 felhasználó és 8000 kép ott maradt.
2011 végén, munkahely váltás után lett szabadidőm ismét, és az akkor már általam használt Yii-ben gondoltam, hogy újra írom az oldalt.
Így az már működik és ismét zajlik az élet :)
A Yii-re azért váltottam PRADO-ról, mert ugyan az MVC nagyon új volt a PRADO felfogásával szemben, ám sebességben olyan szakadék tátongott a kettő között, hogy egyértelmű volt a váltás. Megnyugtató volt számomra, hogy a Yii egyik fejlesztője a PRADO volt alapítója, így egyértelmű volt, hogy minőségi keretrendszer ez is.
Yii-ben kihasználok mindent, amit lehet, de azért pár dolog, aminek nem tetszik a működése, azt inkább magam készítem. Ilyen például az assetek kezelése. Nem szimpatikus, hogy egy mappában random dir-be kerülnek az assetek, és ha kiviszem production-be az alkalmazást, akkor új dir-ek generálódnak. Inkább én belinkelem magamnak, ami éppen kell. Remélem ezt valamikor átalakítják.
Nem szoktam használni a grid-et például, inkább saját foreach ciklust használok, mert felesleges extra lépcsőként tekintek erre a lehetőségre.
Kiegészítettem a rendszert egy saját DataType osztállyal és annak leszármazottjaival, mellyel igyekszem a PHP laza típus kezelését kivédeni. AJAX kommunikációnál és minden klienstől REQUEST-ben érkező adatnál kialakítottam egy DTO (Data Transfer Object) rendszert, ahol előre definiált adatok közlekednek az objektumok között, nem csak feltöltöm a model attributes property-jét a POST-ból érkező adattal. Így pl, mivel külön class-ban van mondjuk egy form-tól várt mezők, jól látható, hogy mi az, és csak az, amit a klienstől várunk. Nagyjából a CFormModel is ezt oldja meg (ha jól tudom), próbáltam is használatát, de kevésbé volt szimpatikus, mint a saját megoldásom.
Ha elakadok, sokszor segít a Yii fórumban keresgélés, de a stackoverflow-n is nagyon sok Yii-s problémára találok megoldást.
Amit viszont örömmel használok a Yii alap lehetőségeiből és letölthető extension-jaiból: EAjaxUpload, urlManager, YiiMail, I18N
Amit még fontosnak tartok megemlíteni, mert sokat könnyít a fejlesztésen, az az, hogy az I18N modult kiegészítettem egy wrapper osztállyal, amit ugyanúgy kell használni, mint a Yii által adott default tool-t, annyi különbséggel, hogy nem kell magunknak belerakni az új fordítandó szavakat az adott dictionary php-ba, hanem magától belerakja, ha még nincs benne, illetve a file-t is létrehozza, ha még nincs. Ez a felfogás a PRADO-ból jött, mert ott is nagyon tetszett, hogy ezt megcsinálja helyettem. Ezt a Yii fórumon meg is osztottam természetesen.
Jelenleg a UNIT tesztek írását készítem, ahol azért néha rájövök, hogy nem teljesen sikerült minden részt tesztelhetőre készíteni. Ezért is alakítottam ki a DTO környzetet például.
-- írta Murányi Sándor
2007-2009 -ig három verziót élt meg az oldal. A verzió váltás okai a szakmai fejlődésem volt elsősorban.
Az első nagyobb lépés a 2009-ben PRADO-ra váltás volt, amikor már némi web2 is bekerült az oldalba, és mégis csak egy összeszedettebb rendszer volt, mint az addigiak. A PRADO-t nagyon szerettem, mert jó volt használni, megvoltak a megfelelő dolgok, nem kellett semmiben feltalálni a spanyol viaszt.
2009-2011-ig sajnos nem nagyon volt foglalkozva az oldallal az akkori munkahelyem miatt, ezért a felhasználói bázis szép lassan el is felejtette az oldalt. Így az addig összegyűlt 1000 felhasználó és 8000 kép ott maradt.
2011 végén, munkahely váltás után lett szabadidőm ismét, és az akkor már általam használt Yii-ben gondoltam, hogy újra írom az oldalt.
Így az már működik és ismét zajlik az élet :)
A Yii-re azért váltottam PRADO-ról, mert ugyan az MVC nagyon új volt a PRADO felfogásával szemben, ám sebességben olyan szakadék tátongott a kettő között, hogy egyértelmű volt a váltás. Megnyugtató volt számomra, hogy a Yii egyik fejlesztője a PRADO volt alapítója, így egyértelmű volt, hogy minőségi keretrendszer ez is.
Yii-ben kihasználok mindent, amit lehet, de azért pár dolog, aminek nem tetszik a működése, azt inkább magam készítem. Ilyen például az assetek kezelése. Nem szimpatikus, hogy egy mappában random dir-be kerülnek az assetek, és ha kiviszem production-be az alkalmazást, akkor új dir-ek generálódnak. Inkább én belinkelem magamnak, ami éppen kell. Remélem ezt valamikor átalakítják.
Nem szoktam használni a grid-et például, inkább saját foreach ciklust használok, mert felesleges extra lépcsőként tekintek erre a lehetőségre.
Kiegészítettem a rendszert egy saját DataType osztállyal és annak leszármazottjaival, mellyel igyekszem a PHP laza típus kezelését kivédeni. AJAX kommunikációnál és minden klienstől REQUEST-ben érkező adatnál kialakítottam egy DTO (Data Transfer Object) rendszert, ahol előre definiált adatok közlekednek az objektumok között, nem csak feltöltöm a model attributes property-jét a POST-ból érkező adattal. Így pl, mivel külön class-ban van mondjuk egy form-tól várt mezők, jól látható, hogy mi az, és csak az, amit a klienstől várunk. Nagyjából a CFormModel is ezt oldja meg (ha jól tudom), próbáltam is használatát, de kevésbé volt szimpatikus, mint a saját megoldásom.
Ha elakadok, sokszor segít a Yii fórumban keresgélés, de a stackoverflow-n is nagyon sok Yii-s problémára találok megoldást.
Amit viszont örömmel használok a Yii alap lehetőségeiből és letölthető extension-jaiból: EAjaxUpload, urlManager, YiiMail, I18N
Amit még fontosnak tartok megemlíteni, mert sokat könnyít a fejlesztésen, az az, hogy az I18N modult kiegészítettem egy wrapper osztállyal, amit ugyanúgy kell használni, mint a Yii által adott default tool-t, annyi különbséggel, hogy nem kell magunknak belerakni az új fordítandó szavakat az adott dictionary php-ba, hanem magától belerakja, ha még nincs benne, illetve a file-t is létrehozza, ha még nincs. Ez a felfogás a PRADO-ból jött, mert ott is nagyon tetszett, hogy ezt megcsinálja helyettem. Ezt a Yii fórumon meg is osztottam természetesen.
Jelenleg a UNIT tesztek írását készítem, ahol azért néha rájövök, hogy nem teljesen sikerült minden részt tesztelhetőre készíteni. Ezért is alakítottam ki a DTO környzetet például.
-- írta Murányi Sándor
Tuesday, July 26, 2011
Gittegylet meg a Yii - avagy Yiiki 2.0 (3. rész)
Akik még mindig olvassák ezt a cikk sorozatot, azoknak KÖSZI. Akik csak most probálkoznak bekapcsolódni, azoknak mindenképp ajánlom az előző két rész elolvasását hiszen ott ismerkedtünk meg olyan dolgokkal mint a yiic parancs, Git forráskezelő és a Gii kódgeneráló.
Az előző részt ott fejeztük be, hogy a Gii segítségével elkészítettük a Page modell osztályunkat a pages táblához. Ha most megnézzük, hogy hogy áll a forrásunkat (git status) akkor láthatjuk, hogy egy Page.php file jött létre a protected/model/ mappán belül. Ezt hozzá is adhatjuk a szokásos git add paranccsal. (A Git-ről itt van egy leírás magyarul a BME oldalain. Ebben a cikk sorozatban már csak a végén vesszük elő mégegyszer, amikor publikáljuk a programunkat).
CRUD
Azzal, hogy elkészítettük a Page modellünket, még semmi, böngészőben látható eredményt nem sikerült produkálnunk. Itt jön a CRUD a képbe,
Create - Létrehoz
Read - (Be)olvas
Update - Frissít
Delete - Töröl
Most megint vegyük elő a varázságyúnkat (Gii) és belépés után kattintsunk a Crud Generator linkre. Ha minden igaz, egy két mezős form-ot kell kapnunk, ahol valójában elég csak az első mezőt kitölteni a Model Class-t azaz Modell Osztáy-t, a Controller ID-t a Gii magától kitalálja. Jó mi? (Megj: a Base Controller Class és a Code Template útvonal is átírható, így ezek segítségével ha akarjuk teljesen újraírhatjuk a Gii viselkedését.)
Tehát írjuk be a Model Class-be, hogy Page és nyomjuk meg (csak egyszer!) a Preview gombot. Ha valami ilyesmit látunk akkor örülhetünk:
Itt már lényegesen több file fog elkészülni mint a modell létrehozásánál. Láthatjuk, hogy maga a Controller (vezérlő) is elkészül majd, a view/page mappa is, ahol a rendszer fogja tárolni a szükséges nézet file-okat (create.php, update.php, view.php stb). Ha minden OK, nyomhatunk a Generate-ra.
A programunk jelenlegi állapotában már mindenre kész. Tudunk oldalakat listázni, készíteni és törölni. Hogy megbizonyosodjunk róla, böngészőnkkel látogassuk meg a következő URL-t:
http://localhost/index.php?r=page
Na de mi nem elégszünk meg ennyivel, hiszen egy igazi Wiki-t szeretnénk készíteni. Jöhet a testreszabás ...
Testreszabás
Beviteli form módosítása
Ha most probálnánk egy Page-t azaz Oldalt készíteni (http://localhost/index.php?r=page/create), akkor azonnal észlelnénk, hogy a beviteli form-on egy csomó olyan mező van, amit nem szeretnénk kézzel minden egyes alkalommal kitölteni, illetve elvárnánk a programunktól, hogy saját maga töltse ki. Ilyen például a created vagy a revision mező.
Módosítsuk is a form-unkat valahogy így:
A Page Modell Szabályainak Beállítésai
A Page (Oldal) modellünkre is ráfér egy kis farigcsálás. Ugyan Gii többnyire kitalálta, hogy milyen szabályokat hozzon létre a különböző form mezőkhöz, a gondolatolvasástól azért még messze van.
Mi ugyanis szeretnénk, ha az Oldalunk címébe csakis betűk, számok, vagy aláhúzás jel szerepelhessen. (Egy jó kis bővítés lenne, ha a programunk automatikusan felülírná a bevitt a címet, de az példa kedvéért itt egy szabályt hozunk létre)
protected/models/Page.php
Az itt használt szabályok elég egyértelműek, de ha valaki jobban bele szeretne mélyülni itt olvashat róluk bővebben: http://www.yiiframework.com/doc/cookbook/56/
Itt még azt is megfigyelhetjük, hogy hogyan kell a programunkat magyarul tanítani ;)
A beforeSave() and save() modell függvények használata/felülírása
A modelljeink, amik a programunkban az adatbázis lekérdezéseket kezelik, mindenféle függyvényekkel fel vannak fegyverkezve, hogy nekünk ne kelljen védőkesztyű nélkül SQL-kódban kotorászni. Az egyik ilyen függvény a save() (mentés) és hű csatlósa a beforeSave() (mentés elött elment). A save() egy adatbázis rekordot köteles elmenteni vagy felülírni.
A pages adatbázis táblánkban van egy olyan mező, hogy created (készítve), ami egy dátum mező. (a példánkban UNIX Timestamp-et használunk!) Ez a mező tartja nyilván, hogy az adott oldal mikor lett készítve/felülírva. Ugyan használhatnánk a save() függvényt arra, hogy ezt az értéket beállítsuk, a példa kedvéért ezt a beforeSave()-vel oldjuk meg.
(Az fontos, hogy itt a szülő beforeSave()-jével térjünk vissza, return parent::beforeSave() )
protected/models/Page.php
Néha előfordul, hogy még a form mezők ellenőrzése elött szeretnénk beállítani valamilyen értéket, ezt a beforeValidate() funkcióval tehetjük meg.
A save() függvénynél már kicsit más a helyzet. Először vegyük sorra, hogy mit is szeretnénk a programunktól, amikor elmentünk egy oldalt. Ha minden igaz, említettük az elején, hogy a jövőben szeretnénk egy revert opciót, ami annyit jelent, hogy az odalalainkat, ha akarjuk, visszaállíthatjuk egy korábbi változatba. Ezt többféle módon is meg lehet valósítani, de talán a legrövidebb megoldás, ha az oldalakat mindig újként mentjük el, és csak növeljük a revision azaz verziószámot.
protected/models/Page.php
A Yii modell osztálya olyan finomságokkal lát el bennünket, mint például a $this->isNewRecord ami egyszerűen megmondja nekünk, hogy most egy új rekordról van e szó, vagy csak felülírunk egyet. Mi persze tudjuk, hogy nekünk arra van szükségünk, hogy minden egyes oldal újként legyen elmentve, tehát ha az oldal nem új, akkor egyszerűen gyártunk egyet ami a $newpage->attributes=$this->attributes segítségével felveszi az eredeti oldal értékeit.
Még annyit érdemes megjegyezni, hogy ha a save() függvényt false paraméterrel hívjuk meg, akkor az ActiveRecord-ban beállított szabályai nem vonatkoznak az adott rekordra.
Az Oldalak-at lekérő SQL módosítása és a hozzá tartozó Nézet (View) beállítása
Ha most néznénk meg az Oldalak listáját, azt vennénk észre, hogy programunk, az egyes Oldalakhoz tartozó összes reviziót megmutatja. Ez ideáig rendben is van, hiszen minden egyes változatot "új"-ként mentettünk el, azonban ez elég zavaró lehet, meg bugyután is néz ki. Ha eddig még nem említettük volna, majd minden Controller osztálynak van egy úgynevezett actionIndex()-je ami az alapértelmezett függvény. Jelen esetünkben ez szolgáltatja az Oldalak listáját. Keressük is meg a PageController-ben és módosítsuk a következők szerint:
protected/controllers/PageController.php - actionIndex()
SQL-ben valamennyire jártasabbak egyből kiszúrhatják, hogy mi is történik. Itt létrehozunk egy úgynevezett CDBCriteria() osztályt aminek segítségével különböző SQL paramétereket állíthatunk be, és ez által módosíthatjuk a lekérdezéseinket, ami ebben az esetben az Oldalak csoportosítását jelenti a title azaz cím szerint, és rendezést a létrehozás dátuma szerint.
Az alábbi file-okat pedig módosítsuk izlésünk szerint (illetve az én izlésem szerint). Ha még emlékszünk, a PageController-t kicsit átalakítottuk, hogy az adott Oldal azonosító ID-ja helyett a title mező értékével dolgozzon. Ez nagyon szép és jó, de a program többi részét is kicsit át kell alakítanunk. Ilyen például az actionCreate() és actionUpdate() funkciókban használt redirect() ami azt a célt szolgálja, hogy bizonyos események után böngészőnket egy meghatározott oldalra küldje.
protected/controllers/PageController.php
A következő file-ok pedig a megjelenítést szolgálják ...
protected/views/page/_view.php
protected/views/page/view.php
Jajj de jó, már lassan készen is vagyunk. Mondjuk a megjelenített oldal egyáltalán nem úgy néz ki mint egy igazi Wiki oldal. A következő részben megnézzük, hogyan használjuk a Yii-be alapból beépített MarkDown értelmezőt, hogy megússzuk a sok str_replace()-t ;)
Mivel a Wiki alkalmazásunk elég speciális (ID-k helyett a cím alapján találunk meg egy-egy Oldalt), ezért a Page vezérlőnkben elég sok minden változott,úgyhogy a teljesség kedvéért ide betettük az egész osztályt.
Az előző részt ott fejeztük be, hogy a Gii segítségével elkészítettük a Page modell osztályunkat a pages táblához. Ha most megnézzük, hogy hogy áll a forrásunkat (git status) akkor láthatjuk, hogy egy Page.php file jött létre a protected/model/ mappán belül. Ezt hozzá is adhatjuk a szokásos git add paranccsal. (A Git-ről itt van egy leírás magyarul a BME oldalain. Ebben a cikk sorozatban már csak a végén vesszük elő mégegyszer, amikor publikáljuk a programunkat).
CRUD
Azzal, hogy elkészítettük a Page modellünket, még semmi, böngészőben látható eredményt nem sikerült produkálnunk. Itt jön a CRUD a képbe,
Create - Létrehoz
Read - (Be)olvas
Update - Frissít
Delete - Töröl
Most megint vegyük elő a varázságyúnkat (Gii) és belépés után kattintsunk a Crud Generator linkre. Ha minden igaz, egy két mezős form-ot kell kapnunk, ahol valójában elég csak az első mezőt kitölteni a Model Class-t azaz Modell Osztáy-t, a Controller ID-t a Gii magától kitalálja. Jó mi? (Megj: a Base Controller Class és a Code Template útvonal is átírható, így ezek segítségével ha akarjuk teljesen újraírhatjuk a Gii viselkedését.)
Tehát írjuk be a Model Class-be, hogy Page és nyomjuk meg (csak egyszer!) a Preview gombot. Ha valami ilyesmit látunk akkor örülhetünk:
Itt már lényegesen több file fog elkészülni mint a modell létrehozásánál. Láthatjuk, hogy maga a Controller (vezérlő) is elkészül majd, a view/page mappa is, ahol a rendszer fogja tárolni a szükséges nézet file-okat (create.php, update.php, view.php stb). Ha minden OK, nyomhatunk a Generate-ra.
A programunk jelenlegi állapotában már mindenre kész. Tudunk oldalakat listázni, készíteni és törölni. Hogy megbizonyosodjunk róla, böngészőnkkel látogassuk meg a következő URL-t:
http://localhost/index.php?r=page
Na de mi nem elégszünk meg ennyivel, hiszen egy igazi Wiki-t szeretnénk készíteni. Jöhet a testreszabás ...
Testreszabás
Beviteli form módosítása
Ha most probálnánk egy Page-t azaz Oldalt készíteni (http://localhost/index.php?r=page/create), akkor azonnal észlelnénk, hogy a beviteli form-on egy csomó olyan mező van, amit nem szeretnénk kézzel minden egyes alkalommal kitölteni, illetve elvárnánk a programunktól, hogy saját maga töltse ki. Ilyen például a created vagy a revision mező.
Módosítsuk is a form-unkat valahogy így:
A Page Modell Szabályainak Beállítésai
A Page (Oldal) modellünkre is ráfér egy kis farigcsálás. Ugyan Gii többnyire kitalálta, hogy milyen szabályokat hozzon létre a különböző form mezőkhöz, a gondolatolvasástól azért még messze van.
Mi ugyanis szeretnénk, ha az Oldalunk címébe csakis betűk, számok, vagy aláhúzás jel szerepelhessen. (Egy jó kis bővítés lenne, ha a programunk automatikusan felülírná a bevitt a címet, de az példa kedvéért itt egy szabályt hozunk létre)
protected/models/Page.php
Az itt használt szabályok elég egyértelműek, de ha valaki jobban bele szeretne mélyülni itt olvashat róluk bővebben: http://www.yiiframework.com/doc/cookbook/56/
Itt még azt is megfigyelhetjük, hogy hogyan kell a programunkat magyarul tanítani ;)
A beforeSave() and save() modell függvények használata/felülírása
A modelljeink, amik a programunkban az adatbázis lekérdezéseket kezelik, mindenféle függyvényekkel fel vannak fegyverkezve, hogy nekünk ne kelljen védőkesztyű nélkül SQL-kódban kotorászni. Az egyik ilyen függvény a save() (mentés) és hű csatlósa a beforeSave() (mentés elött elment). A save() egy adatbázis rekordot köteles elmenteni vagy felülírni.
A pages adatbázis táblánkban van egy olyan mező, hogy created (készítve), ami egy dátum mező. (a példánkban UNIX Timestamp-et használunk!) Ez a mező tartja nyilván, hogy az adott oldal mikor lett készítve/felülírva. Ugyan használhatnánk a save() függvényt arra, hogy ezt az értéket beállítsuk, a példa kedvéért ezt a beforeSave()-vel oldjuk meg.
(Az fontos, hogy itt a szülő beforeSave()-jével térjünk vissza, return parent::beforeSave() )
protected/models/Page.php
Néha előfordul, hogy még a form mezők ellenőrzése elött szeretnénk beállítani valamilyen értéket, ezt a beforeValidate() funkcióval tehetjük meg.
A save() függvénynél már kicsit más a helyzet. Először vegyük sorra, hogy mit is szeretnénk a programunktól, amikor elmentünk egy oldalt. Ha minden igaz, említettük az elején, hogy a jövőben szeretnénk egy revert opciót, ami annyit jelent, hogy az odalalainkat, ha akarjuk, visszaállíthatjuk egy korábbi változatba. Ezt többféle módon is meg lehet valósítani, de talán a legrövidebb megoldás, ha az oldalakat mindig újként mentjük el, és csak növeljük a revision azaz verziószámot.
protected/models/Page.php
A Yii modell osztálya olyan finomságokkal lát el bennünket, mint például a $this->isNewRecord ami egyszerűen megmondja nekünk, hogy most egy új rekordról van e szó, vagy csak felülírunk egyet. Mi persze tudjuk, hogy nekünk arra van szükségünk, hogy minden egyes oldal újként legyen elmentve, tehát ha az oldal nem új, akkor egyszerűen gyártunk egyet ami a $newpage->attributes=$this->attributes segítségével felveszi az eredeti oldal értékeit.
Még annyit érdemes megjegyezni, hogy ha a save() függvényt false paraméterrel hívjuk meg, akkor az ActiveRecord-ban beállított szabályai nem vonatkoznak az adott rekordra.
Az Oldalak-at lekérő SQL módosítása és a hozzá tartozó Nézet (View) beállítása
Ha most néznénk meg az Oldalak listáját, azt vennénk észre, hogy programunk, az egyes Oldalakhoz tartozó összes reviziót megmutatja. Ez ideáig rendben is van, hiszen minden egyes változatot "új"-ként mentettünk el, azonban ez elég zavaró lehet, meg bugyután is néz ki. Ha eddig még nem említettük volna, majd minden Controller osztálynak van egy úgynevezett actionIndex()-je ami az alapértelmezett függvény. Jelen esetünkben ez szolgáltatja az Oldalak listáját. Keressük is meg a PageController-ben és módosítsuk a következők szerint:
protected/controllers/PageController.php - actionIndex()
SQL-ben valamennyire jártasabbak egyből kiszúrhatják, hogy mi is történik. Itt létrehozunk egy úgynevezett CDBCriteria() osztályt aminek segítségével különböző SQL paramétereket állíthatunk be, és ez által módosíthatjuk a lekérdezéseinket, ami ebben az esetben az Oldalak csoportosítását jelenti a title azaz cím szerint, és rendezést a létrehozás dátuma szerint.
Az alábbi file-okat pedig módosítsuk izlésünk szerint (illetve az én izlésem szerint). Ha még emlékszünk, a PageController-t kicsit átalakítottuk, hogy az adott Oldal azonosító ID-ja helyett a title mező értékével dolgozzon. Ez nagyon szép és jó, de a program többi részét is kicsit át kell alakítanunk. Ilyen például az actionCreate() és actionUpdate() funkciókban használt redirect() ami azt a célt szolgálja, hogy bizonyos események után böngészőnket egy meghatározott oldalra küldje.
protected/controllers/PageController.php
A következő file-ok pedig a megjelenítést szolgálják ...
protected/views/page/_view.php
protected/views/page/view.php
Jajj de jó, már lassan készen is vagyunk. Mondjuk a megjelenített oldal egyáltalán nem úgy néz ki mint egy igazi Wiki oldal. A következő részben megnézzük, hogyan használjuk a Yii-be alapból beépített MarkDown értelmezőt, hogy megússzuk a sok str_replace()-t ;)
Mivel a Wiki alkalmazásunk elég speciális (ID-k helyett a cím alapján találunk meg egy-egy Oldalt), ezért a Page vezérlőnkben elég sok minden változott,úgyhogy a teljesség kedvéért ide betettük az egész osztályt.
Tuesday, July 12, 2011
Gittegylet meg a Yii - avagy Yiiki 2.0 (1. rész)
Ugyan ez egy új cikk, de nem teljesen. Talán a tavaly szeptemberben megjelent Yiiki avagy WIKI a'la Yii cikkben bemutatott rendszer 2.0-ás változatának lehetne tekinteni.
./yii/framework/yiic webapp yiiki2
Ha minden jól sikerült, akkor a "Your application has been created successfully under /var/www/yiiki2" - szerű üzenet jelenik meg, ami röviden annyit jelent, hogy az alap program sikeresen létrehozva a megadott mappa alatt.
Azt már itt érdemes megjegyezni, hogy a programunk már ebben a fázisban működőképes. Ha megtekintjük a URL-t egy böngészőben (pl http://localhost vagy http://yiiki.peldaprogram.local) akkor egy (remélhetőleg) üdvözlő képernyő fogad bennünket.
Na itt a Git
Már rögtön az elején érdemes a munkánkat a forráskezelő alá tenni. Lépjünk be a yiiki2/ mappa alá és adjuk ki a következő parancsot.
$git init
Initialized empty Git repository in /var/www/yiiki2/.git/
Ez csak annyit jelent, hogy a Git sikeresen létrehozott egy üres (empty) forrástárat a megadott mappa alatt. Ha most megnézzük a könyvtárszerkezetet, akkor valami ilyesmit kell, hogy kapjunk. (rejtett file-okat is mutatva!)
$ll
drwxr-xr-x 8 imehesz imehesz 4096 2011-07-08 22:34 ./
drwxr-xr-x 42 imehesz imehesz 4096 2011-07-08 22:19 ../
drwxrwxrwx 2 imehesz imehesz 4096 2011-07-08 22:19 assets/
drwxr-xr-x 2 imehesz imehesz 4096 2011-07-08 22:19 css/
drwxr-xr-x 7 imehesz imehesz 4096 2011-07-08 22:34 .git/
drwxr-xr-x 2 imehesz imehesz 4096 2011-07-08 22:19 images/
-rw-r--r-- 1 imehesz imehesz 478 2011-07-08 22:19 index.php
-rw-r--r-- 1 imehesz imehesz 481 2011-07-08 22:19 index-test.php
drwxr-xr-x 14 imehesz imehesz 4096 2011-07-08 22:19 protected/
drwxr-xr-x 3 imehesz imehesz 4096 2011-07-08 22:19 themes/
Láthatjuk is, hogy a .git mappa ott figyel, amibe a Git program fogja tárolni a változtatásainkat.
Rutinos Yii-s mókusként tudjuk azt, hogy az assets/ a protected/runtime/ és a protected/data/ mappa alatt a Yii olyan dolgokat fog tárolni ami 99%-ban minden rendszeren más és más (pl. fejlesztői és éles környezet!), tehát érdemes lenne ezeket nem forráskezelő alá tenni, mert egyszerűen semmi értelme.
A Git erre egy nagyon elegáns megoldást kínál (illetve többet is), egyszerűen hozzunk létre egy file-t .gitignore néven (a yiiki2/ mappa alatt), és adjuk meg neki ezeket az útvonalakat. Így amikor a git ezekhez a mappákhoz ér, egyszerűen figyelmen kívűl hagyja őket. A gyakorlat azt diktálja, hogy még pár dolgot ne vegyünk forráskezelés alá, ilyenek például az adatbázis file-ok, vagy tömörített file-ok stb. Tehát a .gitignore file-unk valahogy így nézzen ki.
$less .gitignore
assets/*
protected/data/*
protected/runtime/*
*.zip
*.sqlite
Nos, eddig megvolnánk, de ha jól emlékszünk akkor a Git az elöbb azt mondta, hogy egy üres rendszert hozott létre. Ez igy is van. Az egyik legfontosabb Git parancs amit gyakran használni fogunk az a git status. Adjuk is ki:
$git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .gitignore
# css/
# index-test.php
# index.php
# protected/
# themes/
nothing added to commit but untracked files present (use "git add" to track)
Amint láthatjuk, annyi történt, hogy a Git kilistázta, hogy mely file-ok változtak. Jelen esetben azonban még semmi nem változott, hiszen még semmit nem rendeltünk a forráskezelő alá. Ezt egyébként alul a Git szépen jelzi is, hiszen azt mondja, hogy nincs semmit a commit-hez hozzáadnunk, azonban vannak olyan file-ok amiket nem követ. Ja, és azt tanácsolja, hogy ezeket a git add utasítással adhatjuk a forráskezelő alá. Remek, pont ez kell nekünk. Adjuk is ki:
$git add .
A pont "." az azt jelenti, hogy MINDEN használható file-t vagy változást adjon hozzá a forráshoz. Miután kiadtuk a parancsot, szemmel láthatóan semmi nem történt, azonban a Git a háttérben szorgosan dolgozik. Ha most kiadjuk a git status -t, egyből észrevesszük, hogy igenis valami történt:
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: .gitignore
# new file: css/bg.gif
# new file: css/form.css
# new file: css/ie.css
# new file: css/main.css
# new file: css/print.css
# new file: css/screen.css
# new file: index-test.php
# new file: index.php
...
A lista elég hosszú, ide csak egy kis részletet illesztettünk be! A lényeg az, hogy ezek a file-ok készen állnak az un. commit-álásra, ami annyit tesz, hogy a módosításaink (jelen esetben új file-jaink) véglegesen a forrás részei lesznek. Magát a commit-álást pedig a -drrrrr ... dobpergés- git commit paranccsal hatjuk végre:
$git commit -m "itt a Yiiki2.0, elso commit-unk"
A -m (message) azaz üzenet, azt jelenti, hogy üzenetet fűzhetünk a commit-hez, aminek hiányát néhány programozó törzsek gyakran kéz- és/vagy fejvesztéssel büntetnek. Persze a képernyőn minden gyorsan leszalad, azért nézzük meg mi is történt:
[master (root-commit) 9e22a96] itt a Yiiki2.0, elso commit-unk
Committer: Imre Mehesz <imehesz@imehesz-laptop.(none)>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:
git config --global user.name "Your Name"
git config --global user.email you@example.com
If the identity used for this commit is wrong, you can fix it with:
git commit --amend --author='Your Name <you@example.com>'
34 files changed, 1512 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
create mode 100644 css/bg.gif
create mode 100644 css/form.css
create mode 100644 css/ie.css
create mode 100644 css/main.css
Elég sok idő eltelt azóta és maga az alap keretrendszer is sokat változott, szerencsénkre. Még annyival szeretnénk kicsit megfűszerezni a fejlesztést, hogy bevonjuk a mostanában nagy népszerűségnek örvendő Git forráskezelőt. Vágjunk is bele.
Bevezetés
Magába az alapok installálásába nem fogunk belemenni, itt csak felsoroljuk mi mindent kell ismerni:
- Objektum Orientált Programozás (PHP 5): A jelenleg stabil Yii 1.1.8-es verzió a PHP 5.1-en alapszik, tehát annak ismerete mindenképp szükséges. - http://hu.wikipedia.org/wiki/Objektumorientált_programozás
- Adatbázis (SQL): A Yii, alapból sokféle adatbázis motort támogat. Az itteni példában én a SQLite-ot fogjuk használni, mert nem igényel különösebben bonyolult szerver oldali beállítást - http://hu.wikipedia.org/wiki/SQL
- MVC (Model-View-Controller) avagy Modell-Nézet-Vezérlő: A Yii az egy MVC-t szorgalmazó keretrendszer. Dióhéjban annyit jelent, hogy az alkalmazás jól elkülöníthető 3 részre. Az M vagy modell, ami az adatbázis jellegű lekérdezéseket végzi, a C vagy vezérlő ami kapcsolatot teremt és feldolgoz felhasználók által bevitt információt és végül a V vagy nézet, ami pedig magát a megjelenítést végzi. Ilyen többek között a Ruby On Rails rendszer is. - http://hu.wikipedia.org/wiki/MVC
- Active Record - ami tulajdonképpen "megszűnteti" a függőséget a különböző adatbázisok között és az adatbázis táblákat objektumokként kezeli. Ez a gyakorlatban azt jelenti, hogy mondjuk fejlesztői környezetben használhatunk SQLite-ot élesben pedig MySQL-t vagy MsSQL-t stb. - http://en.wikipedia.org/wiki/Active_record_pattern
- Git, forráskezelés - vagy verziókezelés alatt több verzióval rendelkező adatok kezelését értjük. Leggyakrabban a mérnöki tudományokban és a szoftverfejlesztésben használnak verziókezelő rendszereket fejlesztés alatt álló dokumentumok, tervek, forráskódok és egyéb olyan adatok verzióinak kezelésére, amelyeken több ember dolgozik egyidejűleg.
Apache, Nginx és egyéb web szerverek beállításába nem szeretnénk itt belemenni. A programot a következő konfigurációval készítettük:
- Ubuntu Linux (10.10)
- Apache 2.x
- SQLite 3
- PHP 5.3.x
- Yii 1.1.8
- SQLite 3
- PHP 5.3.x
- Yii 1.1.8
- Csomagoljuk ki a letöltött Yii-t a web szerverünk fő könyvtárába (pl. /var/www/yii ), a forráskód majd szintén a /var/www alá kerül (pl: /var/www/yiiki2).
Az is fontos, hogy a Yii rendszer a parancssorból is futtatható legyen! (PHP CLI)
A WEB alkalmazás létrehozása
Az alap alkalmazás létrehozása rendkívül egyszerű, csak adjuk ki a kovetkező utasítást (a web szerver root könyvtárából, ahol reméljük a maga a Yii rendszer is elhelyezkedit (pl /var/www).
Ha minden jól sikerült, akkor a "Your application has been created successfully under /var/www/yiiki2" - szerű üzenet jelenik meg, ami röviden annyit jelent, hogy az alap program sikeresen létrehozva a megadott mappa alatt.
Azt már itt érdemes megjegyezni, hogy a programunk már ebben a fázisban működőképes. Ha megtekintjük a URL-t egy böngészőben (pl http://localhost vagy http://yiiki.peldaprogram.local) akkor egy (remélhetőleg) üdvözlő képernyő fogad bennünket.
Na itt a Git
Már rögtön az elején érdemes a munkánkat a forráskezelő alá tenni. Lépjünk be a yiiki2/ mappa alá és adjuk ki a következő parancsot.
$git init
Initialized empty Git repository in /var/www/yiiki2/.git/
Ez csak annyit jelent, hogy a Git sikeresen létrehozott egy üres (empty) forrástárat a megadott mappa alatt. Ha most megnézzük a könyvtárszerkezetet, akkor valami ilyesmit kell, hogy kapjunk. (rejtett file-okat is mutatva!)
$ll
drwxr-xr-x 8 imehesz imehesz 4096 2011-07-08 22:34 ./
drwxr-xr-x 42 imehesz imehesz 4096 2011-07-08 22:19 ../
drwxrwxrwx 2 imehesz imehesz 4096 2011-07-08 22:19 assets/
drwxr-xr-x 2 imehesz imehesz 4096 2011-07-08 22:19 css/
drwxr-xr-x 7 imehesz imehesz 4096 2011-07-08 22:34 .git/
drwxr-xr-x 2 imehesz imehesz 4096 2011-07-08 22:19 images/
-rw-r--r-- 1 imehesz imehesz 478 2011-07-08 22:19 index.php
-rw-r--r-- 1 imehesz imehesz 481 2011-07-08 22:19 index-test.php
drwxr-xr-x 14 imehesz imehesz 4096 2011-07-08 22:19 protected/
drwxr-xr-x 3 imehesz imehesz 4096 2011-07-08 22:19 themes/
Láthatjuk is, hogy a .git mappa ott figyel, amibe a Git program fogja tárolni a változtatásainkat.
Rutinos Yii-s mókusként tudjuk azt, hogy az assets/ a protected/runtime/ és a protected/data/ mappa alatt a Yii olyan dolgokat fog tárolni ami 99%-ban minden rendszeren más és más (pl. fejlesztői és éles környezet!), tehát érdemes lenne ezeket nem forráskezelő alá tenni, mert egyszerűen semmi értelme.
A Git erre egy nagyon elegáns megoldást kínál (illetve többet is), egyszerűen hozzunk létre egy file-t .gitignore néven (a yiiki2/ mappa alatt), és adjuk meg neki ezeket az útvonalakat. Így amikor a git ezekhez a mappákhoz ér, egyszerűen figyelmen kívűl hagyja őket. A gyakorlat azt diktálja, hogy még pár dolgot ne vegyünk forráskezelés alá, ilyenek például az adatbázis file-ok, vagy tömörített file-ok stb. Tehát a .gitignore file-unk valahogy így nézzen ki.
$less .gitignore
assets/*
protected/data/*
protected/runtime/*
*.zip
*.sqlite
Nos, eddig megvolnánk, de ha jól emlékszünk akkor a Git az elöbb azt mondta, hogy egy üres rendszert hozott létre. Ez igy is van. Az egyik legfontosabb Git parancs amit gyakran használni fogunk az a git status. Adjuk is ki:
$git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .gitignore
# css/
# index-test.php
# index.php
# protected/
# themes/
nothing added to commit but untracked files present (use "git add" to track)
Amint láthatjuk, annyi történt, hogy a Git kilistázta, hogy mely file-ok változtak. Jelen esetben azonban még semmi nem változott, hiszen még semmit nem rendeltünk a forráskezelő alá. Ezt egyébként alul a Git szépen jelzi is, hiszen azt mondja, hogy nincs semmit a commit-hez hozzáadnunk, azonban vannak olyan file-ok amiket nem követ. Ja, és azt tanácsolja, hogy ezeket a git add utasítással adhatjuk a forráskezelő alá. Remek, pont ez kell nekünk. Adjuk is ki:
$git add .
A pont "." az azt jelenti, hogy MINDEN használható file-t vagy változást adjon hozzá a forráshoz. Miután kiadtuk a parancsot, szemmel láthatóan semmi nem történt, azonban a Git a háttérben szorgosan dolgozik. Ha most kiadjuk a git status -t, egyből észrevesszük, hogy igenis valami történt:
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: .gitignore
# new file: css/bg.gif
# new file: css/form.css
# new file: css/ie.css
# new file: css/main.css
# new file: css/print.css
# new file: css/screen.css
# new file: index-test.php
# new file: index.php
...
A lista elég hosszú, ide csak egy kis részletet illesztettünk be! A lényeg az, hogy ezek a file-ok készen állnak az un. commit-álásra, ami annyit tesz, hogy a módosításaink (jelen esetben új file-jaink) véglegesen a forrás részei lesznek. Magát a commit-álást pedig a -drrrrr ... dobpergés- git commit paranccsal hatjuk végre:
$git commit -m "itt a Yiiki2.0, elso commit-unk"
A -m (message) azaz üzenet, azt jelenti, hogy üzenetet fűzhetünk a commit-hez, aminek hiányát néhány programozó törzsek gyakran kéz- és/vagy fejvesztéssel büntetnek. Persze a képernyőn minden gyorsan leszalad, azért nézzük meg mi is történt:
[master (root-commit) 9e22a96] itt a Yiiki2.0, elso commit-unk
Committer: Imre Mehesz <imehesz@imehesz-laptop.(none)>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:
git config --global user.name "Your Name"
git config --global user.email you@example.com
If the identity used for this commit is wrong, you can fix it with:
git commit --amend --author='Your Name <you@example.com>'
34 files changed, 1512 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
create mode 100644 css/bg.gif
create mode 100644 css/form.css
create mode 100644 css/ie.css
create mode 100644 css/main.css
...
Itt azt irta ki, hogy létrejött a commit, és a rendszer beállította a nevünket és az email címünket, de azért ellenőrizzük, hogy jó e. Még talán egy git parancsot érdemes itt megemlítenünk, a log -ot, ami az utolsó commit-okat listázza ki:
$git log
commit 9e22a96c0d94b58cb780eaa0d53fedd24df99242
Author: Imre Mehesz <imehesz@imehesz-laptop.(none)>
Date: Fri Jul 8 23:24:51 2011 -0400
itt a Yiiki2.0, elso commit-unk
Ebből a commit azonosítón kívül az is látszik, hogy pénteken este fél 12-kor nincs más dolgom, minthogy ilyeneket irogassak :)
A következő részben reméljük már talán valami kódot is sikerül majd írnunk!
Labels:
forráskezelés,
git,
mvc,
objektumok,
php,
source control
Tuesday, March 8, 2011
MVC Model-View-Controller avagy Modell-Nézet-Vezérlő
Model-View-Controller (MVC)
A Yii a model-view-controller (MVC / modell-nézet-kontroller/vezérlő) tervezési mintát valósítja meg, ami webprogramozás terén széleskörűen alkalmazott. Az MVC célja elválasztani az üzleti logikát a felhasználói felülettel kapcsolatos elgondolásoktól oly módon, hogy a fejlesztők minél könnyebben változtathassák meg az egyes részeket anélkül, hogy a többire hatással lennének. Az MVC mintában
a modell képviseli az információt (adatot) és az üzleti logikát; a nézet tartalmazza a felhasználói felület elemeit, úgy mint szövegek, űrlapok; a kontroller/vezérlő pedig kezeli a modell és a nézet közti párbeszédet.
Az MVC mellett a Yii a 'front-controller'-t, más néven alkalmazást, is bevezeti, ami a felhasználói kérések feldolgozásához biztosít végrehajtási környezetet. Az alkalmazás feloldja a felhasználói kérést, majd továbbítja a megfelelő kontrollernek további feldolgozásra.
A következő ábra egy Yii alkalmazás statikus felépítését mutatja:
Egy tipikus munkafolymat
A következő ábra egy tipikus munkafolyamatot mutat, aminek során a Yii alklamzás egy felhasználói kérést kezel:
1. A felhasználó kérést intéz a következő URL-lel `http://www.example.com/index.php?r=post/show&id=1` a webszerver pedig a kérést kezelendő, végrehajtja a rendszertöltő `index.php` szkriptet.
2. A rendszertöltő szkript létrehoz egy alkalmazás példányt, és futtatja.
3. Az alkalmazás részletes információt kap a felhasználói kérésről a `request` nevű alkalmazás komponens-től.
4. Az alklamazás meghatározza a kért kontroller-t és tevékenységet egy `urlManager` nevű alkalmazás komponens segítségével. A jelenlegi példában ez a `post` kontrollert jelenti, ami a `PostController` osztályra hivatkozik; a tevékenység pedig `show`, aminek a tényleges jelentését a kontroller határozza meg.
5. Az alkalmazás példányosítja a kért kontrollert, hogy a továbbiakban kezelje a felhasználói kérést. A kontroller meghatározza, hogy a `show` tevékenység a kontroller osztályának `actionShow` metódusára vonatkozik. Ezek után a tevékenységhez kapcsolódó szűrőket hoz létre (pl.: hozzáférés ellenőrzés, benchmarking). A tevékenység végrehajtódik, ha a szűrők ezt engedélyezik.
6. A tevékenység beolvassa az adatbázisból az `1`-es ID-jű `Post` modell-t.
7. A tevékenység lefordítja a `show` nevű nézet-et a megadott `Post` modellel.
8. A nézet kiolvassa és megjeleníti a `Post` modell tulajdonságait.
9. A nézet végrehajt néhány kütyü-t.
10. A nézetfordítási eredmény beillesztésre kerül az elrendezés-be.
11. A tevékenység befejezi a nézet fordítást és az eredményt megjeleníti a felhasználónak.
Eredeti: http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc
Fordította: Endyl
A Yii a model-view-controller (MVC / modell-nézet-kontroller/vezérlő) tervezési mintát valósítja meg, ami webprogramozás terén széleskörűen alkalmazott. Az MVC célja elválasztani az üzleti logikát a felhasználói felülettel kapcsolatos elgondolásoktól oly módon, hogy a fejlesztők minél könnyebben változtathassák meg az egyes részeket anélkül, hogy a többire hatással lennének. Az MVC mintában
a modell képviseli az információt (adatot) és az üzleti logikát; a nézet tartalmazza a felhasználói felület elemeit, úgy mint szövegek, űrlapok; a kontroller/vezérlő pedig kezeli a modell és a nézet közti párbeszédet.
Az MVC mellett a Yii a 'front-controller'-t, más néven alkalmazást, is bevezeti, ami a felhasználói kérések feldolgozásához biztosít végrehajtási környezetet. Az alkalmazás feloldja a felhasználói kérést, majd továbbítja a megfelelő kontrollernek további feldolgozásra.
A következő ábra egy Yii alkalmazás statikus felépítését mutatja:
Egy Yii alkalmazás statikus felépítése
Egy tipikus munkafolymat
A következő ábra egy tipikus munkafolyamatot mutat, aminek során a Yii alklamzás egy felhasználói kérést kezel:
Egy Yii alklamazás tipikus munkafolyamata
1. A felhasználó kérést intéz a következő URL-lel `http://www.example.com/index.php?r=post/show&id=1` a webszerver pedig a kérést kezelendő, végrehajtja a rendszertöltő `index.php` szkriptet.
2. A rendszertöltő szkript létrehoz egy alkalmazás példányt, és futtatja.
3. Az alkalmazás részletes információt kap a felhasználói kérésről a `request` nevű alkalmazás komponens-től.
4. Az alklamazás meghatározza a kért kontroller-t és tevékenységet egy `urlManager` nevű alkalmazás komponens segítségével. A jelenlegi példában ez a `post` kontrollert jelenti, ami a `PostController` osztályra hivatkozik; a tevékenység pedig `show`, aminek a tényleges jelentését a kontroller határozza meg.
5. Az alkalmazás példányosítja a kért kontrollert, hogy a továbbiakban kezelje a felhasználói kérést. A kontroller meghatározza, hogy a `show` tevékenység a kontroller osztályának `actionShow` metódusára vonatkozik. Ezek után a tevékenységhez kapcsolódó szűrőket hoz létre (pl.: hozzáférés ellenőrzés, benchmarking). A tevékenység végrehajtódik, ha a szűrők ezt engedélyezik.
6. A tevékenység beolvassa az adatbázisból az `1`-es ID-jű `Post` modell-t.
7. A tevékenység lefordítja a `show` nevű nézet-et a megadott `Post` modellel.
8. A nézet kiolvassa és megjeleníti a `Post` modell tulajdonságait.
9. A nézet végrehajt néhány kütyü-t.
10. A nézetfordítási eredmény beillesztésre kerül az elrendezés-be.
11. A tevékenység befejezi a nézet fordítást és az eredményt megjeleníti a felhasználónak.
Eredeti: http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc
Fordította: Endyl
Tuesday, January 25, 2011
Mi is a Yii?
A Yii egy nagyteljesítményű, komponens alapú PHP keretrendszer nagyszabású
webalkalmazások fejlesztéséhez. Maximális újrahasznosíthatóságot tesz lehetővé
a webprogramozás terén, és a fejlesztési folyamatot is jelentősen meggyorsítja.
A Yii név (ejtsd: angolosan `Yee` vagy fonetikusan `[ji:]`) a következő szavakból
ered: *easy (egyszerű)*, *efficient (hatékony)* és *extensible (kiterjeszthető)*.
Követelmények
Egy Yii alapú webalkalmazás futtatásához egy webszerverre van szükség, mely
rendelkezik PHP 5.1.0 (vagy későbbi) támogatással.
Azoknak a fejlesztőknek, akik Yii-vel akarnak dolgozni, az objektum-orientált
programozás (OOP) megértése meglehetősen hasznosnak bizonyul, mivel a Yii egy
tisztán OOP keretrendszer.
Mire jó a Yii?
A Yii egy általános webprogramozási keretrendszer, ami voltaképpen felhasználható
bármilyen webalkalmazás fejlesztéséhez. Mivel könnyűsúlyú (light-weighted) és
kifinomult gyorsítótárazási megoldásokat nyújt, kifejezetten alkalmas nagy forgalmú
alkalmazások, úgy mint portálok, fórumok, tartalomkezelők (CMS), e-kereskedelmi
rendszerek, stb. fejlesztésére.
A Yii összehasonlítva más keretrendszerekkel
Mint a legtöbb PHP keretrendszer, a Yii egy MVC kertrendszer.
A Yii felülmúlja a többi a keretrendszert a következőkben: hatékony, képességekben
gazdag, és világosan dokumentált. A Yii a kezdektetől fogva komoly weblakalmazások
fejlesztésére lett tervezve. Nem egy projekt mellékterméke vagy netán harmadik féltől
származó kódok összefércelt változata, hanem a szerzők webalkalmazások fejlesztésében
és vizsgálatában szerzett tekintélyes tapasztalatának eredménye és a legnépszerűbb
webprogramozási keretrendszerek és alkalmazások tükröződése.
Eredeti: http://www.yiiframework.com/doc/guide/1.0/en/quickstart.what-is-yii
Fordította: Endyl
webalkalmazások fejlesztéséhez. Maximális újrahasznosíthatóságot tesz lehetővé
a webprogramozás terén, és a fejlesztési folyamatot is jelentősen meggyorsítja.
A Yii név (ejtsd: angolosan `Yee` vagy fonetikusan `[ji:]`) a következő szavakból
ered: *easy (egyszerű)*, *efficient (hatékony)* és *extensible (kiterjeszthető)*.
Követelmények
Egy Yii alapú webalkalmazás futtatásához egy webszerverre van szükség, mely
rendelkezik PHP 5.1.0 (vagy későbbi) támogatással.
Azoknak a fejlesztőknek, akik Yii-vel akarnak dolgozni, az objektum-orientált
programozás (OOP) megértése meglehetősen hasznosnak bizonyul, mivel a Yii egy
tisztán OOP keretrendszer.
Mire jó a Yii?
A Yii egy általános webprogramozási keretrendszer, ami voltaképpen felhasználható
bármilyen webalkalmazás fejlesztéséhez. Mivel könnyűsúlyú (light-weighted) és
kifinomult gyorsítótárazási megoldásokat nyújt, kifejezetten alkalmas nagy forgalmú
alkalmazások, úgy mint portálok, fórumok, tartalomkezelők (CMS), e-kereskedelmi
rendszerek, stb. fejlesztésére.
A Yii összehasonlítva más keretrendszerekkel
Mint a legtöbb PHP keretrendszer, a Yii egy MVC kertrendszer.
A Yii felülmúlja a többi a keretrendszert a következőkben: hatékony, képességekben
gazdag, és világosan dokumentált. A Yii a kezdektetől fogva komoly weblakalmazások
fejlesztésére lett tervezve. Nem egy projekt mellékterméke vagy netán harmadik féltől
származó kódok összefércelt változata, hanem a szerzők webalkalmazások fejlesztésében
és vizsgálatában szerzett tekintélyes tapasztalatának eredménye és a legnépszerűbb
webprogramozási keretrendszerek és alkalmazások tükröződése.
Eredeti: http://www.yiiframework.com/doc/guide/1.0/en/quickstart.what-is-yii
Fordította: Endyl
Tuesday, November 16, 2010
Yii Radiio 35. adás
Megjelent a Yii 1.1.5-ös, sok javítással és mégtöbb újdonsággal. A változtatások listája ezen a linken található meg.
Nagy port kavart fel Qiang azon bejelentése, miszerint a Yii 2.0-át a PHP 5.3 alapjaira építve teljesen újraírják, és nem lesz kompatibilis a régebbi (1.1, 1.2) ágakkal. (mondjuk szvsz ez teljesen egyértelmű). A kiabálókhoz a fórumon lehet csatlakozni.
Ramirez Cobos mutatja be, hogyan használhtajuk az SWFUpload-ot, ami egy Flash meghajtott file-feltöltő rendszer.
Christian Montoya irása a BluePrint CSS rendszer-ről, amit egyre gyakrabban választanak designerek, weboldalak (pl: http://mint.com, http://stay.com vagy a http://dailymotion.com).
Az 5 (6-7-8) legfőbb ok a Yii mellett (ChruchCO szerint: Demók, Tesztelés, Közösség, Kiterjesztések, Dokumentáció, Forrás (egyszerűen jó ránézni), Active Record és Scope-ok kezelése )
Larry Ullman ismerteti a Zend keretrendszerben már jól ismert (Apache) Lucene kereső Yii-re történő implementálását.
Üdvözlünk két újabb bloggert a Yii torpedó-hajó fedélzetén (Kyokasuigetsu, Mushfiq) akik többek között azt is megírják miért váltottak egyéb rendszerekről (pl. CodeIgniter és Symfony). A blogokat itt meg itt olvashatjátok.
Ha valaki már kicsit járatos a Yii felépítésében az biztosan tudja, hogy hol található (és mire való) az assets mappa. Néhány kivételes esetben azonban szükség lehet rá, hogy ezt máshova tegyük. Ezt magyarázzal el Dana Luther ebben a blog post-ban.
Ha valakinek (még mindig) gondot okozna, hogy melyik MVC-re alapuló PHP keretrendszert válassza, annak hasznos lehet Jorges Albaladejo tesztje, aki több más rendszert is megvizsgál és próbál segítséget nyújtani a PHPs közösségnek.
SamDark mutatja be, hogyan lehet cron alkalmazásokat futtatni Yii-n keresztül.
Ha valakinek sürgős segítségre van szüksége valamilyen Yii-vel kapcsolatos problémara, és nincs ideje (türelme?) a fórum látogatóinak válaszára várni, annak érdemes kipróbálnia a #yii IRC csatornát, ahol naponta több mint 30-40 lelkes Yii programozó próbál egymásnak segítséget nyújtani.
Semmiképp nem szeretnénk pletykát indítani, de egyre többet hallani a MySQL és Oracle háza táján történő bizonytalanságokról. Az adatbázis motor lecserélését segítheti elő a MariaDB, amit egy az egyben arra találtak ki, hogy a MySQL-t leváltsa. (állítólag néhai MySQL programozók találták ki). Mindenképp érdemes rá odafigyelni.
A hét oldala: bumperize.com, akik arra vetemednek, hogy a már jól megszokott szöveges alapó email-jeinket felcsinosítsák.
----------------------------------------------------------------------------------------------------------
eredeti: http://yiiradiio.mehesz.net/episode-35
Nagy port kavart fel Qiang azon bejelentése, miszerint a Yii 2.0-át a PHP 5.3 alapjaira építve teljesen újraírják, és nem lesz kompatibilis a régebbi (1.1, 1.2) ágakkal. (mondjuk szvsz ez teljesen egyértelmű). A kiabálókhoz a fórumon lehet csatlakozni.
Ramirez Cobos mutatja be, hogyan használhtajuk az SWFUpload-ot, ami egy Flash meghajtott file-feltöltő rendszer.
Christian Montoya irása a BluePrint CSS rendszer-ről, amit egyre gyakrabban választanak designerek, weboldalak (pl: http://mint.com, http://stay.com vagy a http://dailymotion.com).
Az 5 (6-7-8) legfőbb ok a Yii mellett (ChruchCO szerint: Demók, Tesztelés, Közösség, Kiterjesztések, Dokumentáció, Forrás (egyszerűen jó ránézni), Active Record és Scope-ok kezelése )
Larry Ullman ismerteti a Zend keretrendszerben már jól ismert (Apache) Lucene kereső Yii-re történő implementálását.
Üdvözlünk két újabb bloggert a Yii torpedó-hajó fedélzetén (Kyokasuigetsu, Mushfiq) akik többek között azt is megírják miért váltottak egyéb rendszerekről (pl. CodeIgniter és Symfony). A blogokat itt meg itt olvashatjátok.
Ha valaki már kicsit járatos a Yii felépítésében az biztosan tudja, hogy hol található (és mire való) az assets mappa. Néhány kivételes esetben azonban szükség lehet rá, hogy ezt máshova tegyük. Ezt magyarázzal el Dana Luther ebben a blog post-ban.
Ha valakinek (még mindig) gondot okozna, hogy melyik MVC-re alapuló PHP keretrendszert válassza, annak hasznos lehet Jorges Albaladejo tesztje, aki több más rendszert is megvizsgál és próbál segítséget nyújtani a PHPs közösségnek.
SamDark mutatja be, hogyan lehet cron alkalmazásokat futtatni Yii-n keresztül.
Ha valakinek sürgős segítségre van szüksége valamilyen Yii-vel kapcsolatos problémara, és nincs ideje (türelme?) a fórum látogatóinak válaszára várni, annak érdemes kipróbálnia a #yii IRC csatornát, ahol naponta több mint 30-40 lelkes Yii programozó próbál egymásnak segítséget nyújtani.
Semmiképp nem szeretnénk pletykát indítani, de egyre többet hallani a MySQL és Oracle háza táján történő bizonytalanságokról. Az adatbázis motor lecserélését segítheti elő a MariaDB, amit egy az egyben arra találtak ki, hogy a MySQL-t leváltsa. (állítólag néhai MySQL programozók találták ki). Mindenképp érdemes rá odafigyelni.
A hét oldala: bumperize.com, akik arra vetemednek, hogy a már jól megszokott szöveges alapó email-jeinket felcsinosítsák.
----------------------------------------------------------------------------------------------------------
eredeti: http://yiiradiio.mehesz.net/episode-35
Labels:
assets,
blueprint,
CodeIgniter,
cron,
css,
flash,
lucene,
mariadb,
mvc,
mysql,
swfupload,
Symfony,
teszt,
yii 1.1.5,
yii irc,
zend framework
Tuesday, October 26, 2010
Hogyan kezdjük?
A Yii rendszert a kezdetektől fogva úgy tervezték, hogy WEB alapú alkalmazások készítését megkönnyitse. Ebben a postban megmutatjuk, hogyan lehet a legegyszerűbb egy alap, adatbázissal összekapcsolt programot elkezdeni.
0. lépés - Előkészítés
A Yii rendszer letöltése és installálása után, egyszerűen futtassuk le azt a konzol parancsot, ami elkészíti a WEB-es alkalmazásunk vázát. A program már ekkor is működőképes, olyan finomságokkal fűszerezve mint felhasználó beléptetés vagy kapcsolat felvételi űrlap. Ezekre az alapokra már szépen építhetünk bonyolultabb funkciókat a programunk számára.

1. lépés - Az adatbázis létrehozása
Amig Yii jelentősen lecsökkenti ismétlődő forráskód írását, az izgalmas rész, a kreatív munka ránk marad. Ez gyakran kezdődik adatbázis és táblák tervezésével.

2a. lépés - Yii elkészíti a Modell Osztályokat
Most a Yii rendszeren van a sor, hogy az előkészített adatbázis táblából használható PHP kódot készítsen. Ezt könnyen megtehetjük a rendszerbe épített, böngésző alapú kód generálóval (gii), aminek segítségével pillanatok alatt működő modell osztályokat készíthetünk, anélkül, hogy egy sort is gépelnünk kéne. Modell osztályokat használva az adatbázis táblák érhetők objektum osztályként.

2b. lépés - Yii elkészíti a CRUD kód alapokat
Az előzőekben említett kód generáló segítségével készíthetjük el a nagyon gyakran használatos CRUD funkciókat a kiválasztott adatbázis táblához. (Create azaz Létrehoz, Read - Beolvas, Update - Frissít, Delete - Töröl ).
Az elkészített forráskód természetesen személyre szabható, a jól ismert MVC (Model - Modell, View - Nézet, Controller - Vezérlő) szabályait betartva. Egyelőre eddig minden sort a Yii rendszer készített, még billentyűzethez nem kellett nyúlnunk.

3. lépés - Az elkészített kód testreszabása, finomítása
Az utolsó lépés, a Yii által elkészített forrás kód testreszabása. Például, hogy ne jelenítsük meg a jelszó oszlopot a listában, egyszerűen töröljük a jelszó mezőt az alábbi adminisztrációs nézet file-ban:

Hogyan tovább?
A fenti leírás persze csak egy nagyon kicsi bepillantást enged a Yii csodálatos világába. A következő logikus lépés lenne, hogy letöltsük a Yii keretrendszert, probáljunk ki egy vagy két példa programot, és csatlakozzunk a többiekhez a fórumon.
Két kis magyar példa:
Yiiki avagy WIKI a'la Yii - egy nagyon egyszerű, Yii alapokat bemutató alkalmazás, vagy
Környezetbarát Egységtesztelés Meztelencsigákkal - egy kicsit komolyabb példaprogram.
Sok sikert!
0. lépés - Előkészítés
A Yii rendszer letöltése és installálása után, egyszerűen futtassuk le azt a konzol parancsot, ami elkészíti a WEB-es alkalmazásunk vázát. A program már ekkor is működőképes, olyan finomságokkal fűszerezve mint felhasználó beléptetés vagy kapcsolat felvételi űrlap. Ezekre az alapokra már szépen építhetünk bonyolultabb funkciókat a programunk számára.
1. lépés - Az adatbázis létrehozása
Amig Yii jelentősen lecsökkenti ismétlődő forráskód írását, az izgalmas rész, a kreatív munka ránk marad. Ez gyakran kezdődik adatbázis és táblák tervezésével.
2a. lépés - Yii elkészíti a Modell Osztályokat
Most a Yii rendszeren van a sor, hogy az előkészített adatbázis táblából használható PHP kódot készítsen. Ezt könnyen megtehetjük a rendszerbe épített, böngésző alapú kód generálóval (gii), aminek segítségével pillanatok alatt működő modell osztályokat készíthetünk, anélkül, hogy egy sort is gépelnünk kéne. Modell osztályokat használva az adatbázis táblák érhetők objektum osztályként.
2b. lépés - Yii elkészíti a CRUD kód alapokat
Az előzőekben említett kód generáló segítségével készíthetjük el a nagyon gyakran használatos CRUD funkciókat a kiválasztott adatbázis táblához. (Create azaz Létrehoz, Read - Beolvas, Update - Frissít, Delete - Töröl ).
Az elkészített forráskód természetesen személyre szabható, a jól ismert MVC (Model - Modell, View - Nézet, Controller - Vezérlő) szabályait betartva. Egyelőre eddig minden sort a Yii rendszer készített, még billentyűzethez nem kellett nyúlnunk.
3. lépés - Az elkészített kód testreszabása, finomítása
Az utolsó lépés, a Yii által elkészített forrás kód testreszabása. Például, hogy ne jelenítsük meg a jelszó oszlopot a listában, egyszerűen töröljük a jelszó mezőt az alábbi adminisztrációs nézet file-ban:
Hogyan tovább?
A fenti leírás persze csak egy nagyon kicsi bepillantást enged a Yii csodálatos világába. A következő logikus lépés lenne, hogy letöltsük a Yii keretrendszert, probáljunk ki egy vagy két példa programot, és csatlakozzunk a többiekhez a fórumon.
Két kis magyar példa:
Yiiki avagy WIKI a'la Yii - egy nagyon egyszerű, Yii alapokat bemutató alkalmazás, vagy
Környezetbarát Egységtesztelés Meztelencsigákkal - egy kicsit komolyabb példaprogram.
Sok sikert!
Tuesday, September 21, 2010
Yii Radiio - 31. adás
MZ/x MZ/x,
Itt a Yii Radiio 31. adása, nézzük mik a legújabb hírek a Yii háza táján:
- Hosszas fontolgatás után úgy döntöttünk, hogy a Facebook 'csoport' helyett egy 'oldal'-t készítünk amivel talán egyszerűbben tudunk kapcsolatot teremteni az érdeklődőkkel. Csupán LIKE-olni kell és kész is :) http://facebook.com/yiiradiio.
- Frank Kleine még 2008-ban írt egy cikket az 'annotations' és a PHP kapcsolatáról, és most újraelemzi a helyzetet, és egy megoldásra is rámutat a Yii segítségével.
http://www.stubbles.org/ archives/79-State-of- annotations-in-the-PHP-world,- revisited.html
- A HAML and SASS kiterjesztésnek jelent meg egy újabb változata. Aki nem ismerné, a Ruby környezetben már régóta használt HTML és CSS "csonka kód" megoldásról van szó, aminek segítségével sokkal gyorsabban tudunk program kódot írni, hiszen nem kell annyit gépelnünk ...
http://www.yiiframework.com/ extension/haml-and-sass/
- Végre a Yii-hez is elért a már rengeteg helyen használt OAuth. Köszönet CGeorge-nak.
http://www.yiiframework.com/ extension/eoauth/
- Megjelent a Yii 1.1.4-es változata, közel 60 hibajavítással és újításokkal. A teljes listáért ide klikkoljatok:
http://www.yiiframework.com/ files/CHANGELOG-1.1.4.txt
- Az MVC (Modell - Nézet - Vezérlő) elterjedésével egyre többen próbálják újraértelmezni a már jól bevált technológiát, de még mindig MVC-nek álcázva. A "Nézet az nem Template" -
http://r.je/views-are-not- templates.html
- Ha már nem lenne elég, itt egy újabb NoSQL szerű adatbázis motor, de azt mondják jobb minden eddiginél. Majd meglátjuk: Pomegranate.
- A hét oldala: PicLyf képmegosztó szolgáltatás és közösségi oldal a Twidl Inc.-től.
Itt a Yii Radiio 31. adása, nézzük mik a legújabb hírek a Yii háza táján:
- Hosszas fontolgatás után úgy döntöttünk, hogy a Facebook 'csoport' helyett egy 'oldal'-t készítünk amivel talán egyszerűbben tudunk kapcsolatot teremteni az érdeklődőkkel. Csupán LIKE-olni kell és kész is :) http://facebook.com/yiiradiio.
- Frank Kleine még 2008-ban írt egy cikket az 'annotations' és a PHP kapcsolatáról, és most újraelemzi a helyzetet, és egy megoldásra is rámutat a Yii segítségével.
http://www.stubbles.org/
- A HAML and SASS kiterjesztésnek jelent meg egy újabb változata. Aki nem ismerné, a Ruby környezetben már régóta használt HTML és CSS "csonka kód" megoldásról van szó, aminek segítségével sokkal gyorsabban tudunk program kódot írni, hiszen nem kell annyit gépelnünk ...
http://www.yiiframework.com/
- Végre a Yii-hez is elért a már rengeteg helyen használt OAuth. Köszönet CGeorge-nak.
http://www.yiiframework.com/
- Megjelent a Yii 1.1.4-es változata, közel 60 hibajavítással és újításokkal. A teljes listáért ide klikkoljatok:
http://www.yiiframework.com/
- Az MVC (Modell - Nézet - Vezérlő) elterjedésével egyre többen próbálják újraértelmezni a már jól bevált technológiát, de még mindig MVC-nek álcázva. A "Nézet az nem Template" -
http://r.je/views-are-not-
- Ha már nem lenne elég, itt egy újabb NoSQL szerű adatbázis motor, de azt mondják jobb minden eddiginél. Majd meglátjuk: Pomegranate.
- A hét oldala: PicLyf képmegosztó szolgáltatás és közösségi oldal a Twidl Inc.-től.
Labels:
haml,
mvc,
nosql,
oauth,
pomegranate,
sass,
yii keretrenszer,
yii radiio
Subscribe to:
Posts (Atom)
