[ stex @ 23.09.2011. 16:43 ] @
Poceo sam da ucim OOP i MVC ali mi neke stvari nisu bas najjasnije pa ako vam nije tesko da mi ih pojasnite. Recimo imam neku (nedovrsenu) primitivnu aplikaciju telefonski imenik cisto kao primer. index.php Code: <?php include "model/sql.php"; include "model/tmp.php"; include "controller/Controller.php"; $page = new tmp("view/main.tpl"); $controller = new Controller(); $page->set("page", $controller->invoke()); echo $page->display(); ?> U model/sql.php imam openConn, closeConn, query, query_one. U model/tmp.php mi se nalazi kao neki engine koji uzima template (cist html) i u njega ubacuje podatke sa set(“key”, “value”). controller/Controller.php Code: <?php require "model/pbook.php"; class Controller { public $pbook; function __construct() { $this->pbook = new pbook(); } function invoke() { switch ($_GET['action']) { case "show_pbook": return $this->pbook->show_pbook(); break; case "edit_form_pbook": return $this->pbook->edit_form_pbook(); break; //itd... default: return $this->pbook->show_pbook(); break; } } } model/pbook.php Code: <?php class pbook { function show_pbook(){ $x = new tmp("view/show_pbook.tpl"); $x->set('naslov','ovo je test'); $q = new sql(); $sql = $q->query('SELECT * FROM imenik'); if($sql){ while ($r = mysql_fetch_array($sql)) { $x->getBlock(1); $key = array('id', 'name', 'mobile'); $value = array($r['id'], $r['name'], $r['mobile']); $x->set($key, $value); } $x->getBlock(2); } return $x->display(); } function edit_form_pbook(){ $x = new tmp("view/edit_pbook.tpl"); $key = array('id','name','mobile'); if($_GET['id']){ $q = new sql(); $r = $q->query_one('SELECT * FROM imenik WHERE id = "'.$_GET['id'].'"'); $value = array($r['id'], $r['name'], $r['mobile']); }else{ $value = array('', '', ''); } $x->set($key, $value); return $x->display(); } function add_edit_pbook(){ //ovde sad ide neki kod za unos ili korekciju } function delete_pbook(){ //ovde sad ide neki kod za brisanje } } ?> Templejti su nebitni sada... Koliko sam razumeo Controller.php (iz Controller) uzima i prociscava sve od korisnika. A zatim u zavisnosti od akcije pozivam klase/metode iz Modela, koje opet povlace templejt fajlove (View). Da li je ovaj nacin rada ispravan i gde gresim? Da li sam dobro shvatio koncept MVC? OOP? Da li je problem sto nemam bas nikakav php kod u View delu? Sve petlje (for, foreach, while itd) drzim u Modelu. Time sam hteo da potpuno eliminisem php kod od html. Negde sam procitao da metoda ne bi trebalo da ima vise od par redova. A moje metode u klasi pbook imaju bas dosta redova. Ali ne vidim kako bih mogao da ih smanjim. Ako u jednoj metodi treba da imam vise sql upita ili petlja, da li je bolje da ih sve ostavim u jednoj metodi ili je bolje da ih nekako razbijem u vise? |