Recimo imam neku (nedovrsenu) primitivnu aplikaciju telefonski imenik cisto kao primer.
index.php
<?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
<?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
<?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?