Kedves Fórumtagok!
Örömmel jelentem be, hogy szabadon elérhetővé tettem, LISA-nak becézett PHP-s keretrendszerem forrását. A keretrendszer megvalósítja a "model view controller"-ként elterjed paradigmát. A project elérhető itt, készítettem két rövid wiki bejegyzést, mely segíti a kezdeti nehéz lépéseket. A rendszert kisebb-nagyobb eltéréssel éles bevetésen is használom, tehát nem egy félkész dologról van szó, persze volt/van/lesz rajta mit fejleszteni.
Üdv.
- 2806 megtekintés
Hozzászólások
Egy up-ot talán még megér azoknak akik esetleg csak hétvégén olvassák az oldalt, ezen felül javult és bővült a wiki és kijött egy alrelease is.
- A hozzászóláshoz be kell jelentkezni
Érdekes ez a getrow-getall szokás. Elég lenne egy getall, úgyis a query határozza meg hány sor jön vissza. Egy array_shift-tel ugyanaz jön vissza a getallból mint a getrowból egy sor esetén. Minek az adatbázis absztrakció ha egyszer úgyis adatbázis specifikus a query?
$db = new dbhandler("user:password@localhost");
$result = array_shift($db->query("SELECT * FROM table WHERE name = 'Fred'"));
echo $result->userid;
$results = $db->query("SELECT * FROM table WHERE gender = 'male'");
foreach($results as $result){
echo $result->userid;
}
Természetesen ez csak egy egyesített lekérdezés kezelő függvénnyel működne amit query-nek hívunk.
- A hozzászóláshoz be kell jelentkezni
Mint a visszatérési értékből is látszik a getAll egy tömbbel tér vissza, míg a getOne egy objektummal, így van külömbség a két függvény között, és nem a fejlesztőnek kell a kivennie az első sort.
$db = new dbhandler("user:password@localhost");
$result = array_shift($db->query("SELECT * FROM table WHERE name = '". mysql_escape_string("Fred") . "'"));
echo $result->userid;
helyett mennyivel egyszerűbb (hogy a konkrét keretrendszer megoldásánál maradjunk)
echo QueryHandler::getOne("SELECT * FROM table WHERE name = :name", array("name" => "Fred"))->userid;
vagy
$results = $db->query("SELECT * FROM table WHERE gender = '" . mysql_real_escape_string(male) . "'");
foreach($results as $result){
echo $result->userid;
}
helyett pedig
$results = QueryHandler::getAll("SELECT * FROM table WHERE gender = :gender'", array("gender" => "gender"));
foreach($results as $result){
echo $result->userid;
}
persze ilyen egyszerű lekérdezésnél nem feltétlen tükröződik az egyzserűség.
- A hozzászóláshoz be kell jelentkezni
Szerintem semennyivel. Ismerkedj meg Occam beretvájával.
A query escape-elése a preg_replace-es megoldással viszont tetszik. Én eddig a request-eket escape-eltem az alkalmazott adatbázistól függő módon, de valószínűleg ez a tutibb megoldás. Sőt, biztos.
echo array_shift($db->query("select szoveg from tabla where id=:id", array(id=>'14')))->szoveg;
- A hozzászóláshoz be kell jelentkezni
Szia,
Megneztem. Alapvetoen az URL-mapping megoldasod tetszik, mert az a djangora emlekeztet (bar a kigyokat keruljuk, de elismerjuk oket). Ugyanakkor elegge letersz a megszokott modszerekrol. Az pl. kifejezetten tetszik, hogy nem a controller vadassza ki a getparametereket, hanem az igy jon.
Ma a webes keretrendszer-paradigmakban a mintak nagyjabol letisztultak, valljuk be, piciket a ruby on railsnek koszonhetoen, de PHP oldalon a legnagyobb hatast a latszat ellenere eleg lightweight Zend Framework (http://zend.framework.com) tette. Ebben egy controller tobb operaciot tud vegrehajtani, es az URL az a /controller/operation -nek felel meg.
Nem latom a rendszeredben az Auth frameworkot.
Nem latom azt, hogy minek van model frameworkod, ha az adatbazis frameworkodhoz nem kapcsolod egyaltalan. Altalaban ugyanis nem query-t akarsz vegrehajtani, hanem azokat a model elemeket szeretned megszerezni, amik megfelelnek bizonyos kriteriumoknak.
Szoval ez igy tok jo, de semmikeppen nem hasznalnam.
Tudnek ajanlani viszont par dolgot. Eloszor is mindenkepepn:
http://framework.zend.com (ezt lehet mar ismered persze;egyebkent szokas "darabokban" hasznalni, nehany moduljat csak)
http://symfony-project.org (ez a zend-et hasznalja, szep, nagy, okos)
http://rubyonrails.org (tudom, uncsi :)
http://java.sun.com/products/ejb/docs.html (Ez kokemeny anyag, de mondjuk hogy mit tud egy jo modelrendszer, azt az EJB2.1 specibe anno nagyon szepen leirtak... csak cseszettbonyolult volt hasznalni, igy maradt a lebutitott, de kenyelmes EJB3)
http://www.djangoproject.com/ - ez a kigyoke
Ja, a smarty-t felejtsd el. Nem passzintok be ide php forrast, hogy nehogy megoruljon a HUP, de alapvetoen a PHP maga egy template nyelv eredetileg, es kis trukkozessel - 11 sor - lehet irni rendes template engine-t, olyat, ami a Zend-alapu cuccokban is van. Ennyi: http://code.google.com/p/php-oembed/source/browse/trunk/LazyTemplateEng…
Egyszoval: az utnak az elejen jarsz, es kozel se biztos, hogy erdemes vegigjarni.
En a helyedben elkezdenek komolyan projektezni Zend-del es / vagy symfonyval ,mondjuk egy evet, utana visszaneznek, es megkerdeznem magamtol, hogy erdemes-e lightweight frameworkot csinalnom.
- A hozzászóláshoz be kell jelentkezni
Anno en is nekialltam frameworkot irni, aztan rajottem, hogy mennyivel egyszerubb egy letezot hasznalni Lass csodat, tenyleg. Symfonyt hasznalok, eddig mindenre jo volt.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
"az URL az a /controller/operation -nek felel meg"
ez elég nagy "butaság" mert nehéz többnyelvő oldalakat, ahol az url is többnyelvő készíteni.
"Nem latom azt, hogy minek van model frameworkod, ha az adatbazis frameworkodhoz nem kapcsolod egyaltalan. Altalaban ugyanis nem query-t akarsz vegrehajtani, hanem azokat a model elemeket szeretned megszerezni, amik megfelelnek bizonyos kriteriumoknak."
Igazából a modellek imlementálását teljesen a fejlesztőre bízza a rendszer, létezik pár abstract osztály, mely az entitások működését definiálja, de ezeket nem kötelező használni.
Ismerkedtem már pár keretrendszerrel a felsoroltak közül is, és számosat tanulmányoztam. Ami miatt mégis a saját fejlesztés mellett tette mle a voksom, az pont "Ugyanakkor elegge letersz a megszokott modszerekrol" és számomra sokkal kényelmesebb ez a megoldás.
Ami a smarty-t illeti, és ez teljesen szubjektív utálom a a php tageket folyton nyitni meg zárni és sokkal kényelmesebb a smarty.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
köszi ez jó tipp, én még ezen gondolkoztam
http://phptal.motion-twin.com/
- A hozzászóláshoz be kell jelentkezni
Alapvetoen a controller/operation lehet akarmilyen nyelvu (peldaul angol), ugyis a parameter dont.
Rails eseteben pl. van ilyen: /articles/show/413-opensource-mvp-php-framework . Ebbol a /articles/show az lehet angol, es a maradek resz lokal nyelvu.
Teljes egeszeben lokalizalt url szerintem azert sem jo, mert aki esetleg nem ismeri a celnyelvet, az teljesen elteved az oldalon (pl. en a wincmd.ru oldalt azert tudom hasznalni, mert az url-jei kis kiveteltol eltekintve angol elemekbol allnak. Egy kukkot nem tudok oroszul). Meg teljes egeszeben ugysem lehet az url-t lokalizalni, hiszen pl. a domainnev fix (most tekintsunk el az ebay es hasonlo szornyetegektol).
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
"Nem latom azt, hogy minek van model frameworkod, ha az adatbazis frameworkodhoz nem kapcsolod egyaltalan. Altalaban ugyanis nem query-t akarsz vegrehajtani, hanem azokat a model elemeket szeretned megszerezni, amik megfelelnek bizonyos kriteriumoknak."
Megfogadva észrevételed implementáltam ilyen réteget. Használata itt, mondjuk nem újítottam nagyot, csak a keretrendszerben lévő eddigi elemekből építettem egy osztályt. Hozzáteszem, hogy nem vagyok híve az ilyen adatbázisból kiolvasom milyen oszlopok vannak megoldásoknak, bár tény, hogy egyszerűbb objektunok esetén nagyszerűen működik.
- A hozzászóláshoz be kell jelentkezni
Probald megnezni, hogy a Rails hogyan hasznalja ezt a feature-t. Vannak azok a property-k amik az adatbazis oszlopaibol jonnek, de ugyanakkor akarmilyen property-t is irhatsz a sajat modelledben, olyant is, ami amugy absztrakt, tehat koze nincs az adatbazishoz, meg ugy nagyon semmihez sem.
Cserebe az objektumok kozti kapcsolati viszonlyatokat nagyon egyszeruen valositja meg (1:1, 1:N, N:N)
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Kösözönö mindenki építő hozzászólását.
- A hozzászóláshoz be kell jelentkezni
Hint: ne hasznalj mailto: linket, nagyon sok bot kepes az ilyen alap obfuszkaciokat eliminalni. Kapcsold be a contact formot a profilodban, es oda linkelj. Ugyanugy e-mailben jon meg.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni