Witam
Od niedawna zaczalem interesowac sie MVC. Ale w dalszym ciagu nie wiem czy dobrze rozumuje istote MVC. Dlatego postanowilem napisac prosty (powtarzam, prosty, system) zeby sprawdzic czy ide w dobrym kierunku. Prosze o komentarze, jesli chodzi o sam schemat i istote wzorca MVC.
Na poczatek przedstawie strukture katalogow:
./ - katalog glowny
actions/ - katalog przechowujacy pliki .ini do wybranej akcji mozemy podac co ma zostac wykonane nastepnie
configs/ - katalog z plikami konfiguracyjnymi - narazie nie uzyty
controllers/ - katalog z kontrolerami - narazie tylko kontroler glowny
models/ - katalog z plikami modeli
views/ - katalog z plikami widokow
index.php - plik glowny ktory uruchamia kontroler
Zaczynamy od poczatku - kod kontrolera:
<?php
class Ctrl{
private $Request=false; // obiekt
private $action; // nazwa akcji - nieobowiazkowa
private $view; // nazwa widoku
protected $model; // nazwa modelu - nieobowiazkowa
protected $objView; // obiekt widoku
protected $objModel; // obiekt modelu
// konstruktor
public function __construct($request){
// ustawianie pol klasy
$this->view=$request->getParam('view');
$this->view=($this->view) ? $this->view : 'main'; // ustawianie standardowego widoku
// jesli zostal podany model ustawia jesli nie jest taki sam jak nazwa widoku
$this->model=($request->getParam('model')) ? $request->getParam('model') : $this->view;
// model z sufixem Mod
$this->model.='Mod';
// pobiera parametr akcji o ile zostal podany
$this->action=$request->getParam('action');
// jesli zostala podana akcja laduje model i wykonuje odpowiednia czynnosc
if($this->action){
require_once('./models/'.$this->model.'.model.php');
$this->objModel=new $this->model($request);
$action=$this->action;
$this->objModel->$action();
do{
// sprawdza czy plik konfiguracyjny akcji uwzglednia wykonanie kolejnej akcji
$action=$tmpCfg['next'];
// jesli tak to ja wykonuje itd.
$this->objModel->$action();
}while(!$tmpCfg['next']);
}
// laduje obiekt widoku
$this->execute();
}
public function execute($view=false){
// sprawdza czy obiekt modelu juz istnieje czyli czy podana byla akcja
require_once('./models/'.$this->model.'.model.php');
$this->objModel=new $this->model($request);
}
// laduje obiekt widoku
require_once('./views/'.$this->view.'.view.php');
$this->objView=new $this->view($this->objModel);
}
}
?>
Zakladamy, ze uzytkownik wpisal: index.php?view=Users&action=addUser&userName=root
kontroler laduje wiec model UsersMod:
<?php
class UsersMod {
public $addedUser;
public $request;
public $count;
function __construct($request){
$this->request=$request;
}
function addUser(){
$this->addedUser=$this->request->getParam('userName');
return true;
}
function countUsers(){
return $this->count++;
}
function getAddedUser(){
return $this->addedUser;
}
function getUsersNum(){
return $this->count;
}
}
?>
i wykonuje w nim akcje zmianu danych, a poniewaz akcja addUser() posiada plik konfiguracjny z wywolaniem jako kolejnej akcji countUsers wywoluje kolejna akcje. No i pozostaje wyswietlenie widoku Users:
<?php
class Users {
function __construct($objModel){
print 'Dodalem uzytkownika: '.$objModel->getAddedUser().' i teraz mam zarejestrowanych uzytkownikow: '.$objModel->getUsersNum(); }
}
?>
Co sadzicie o tym? Czy dobrze rozumuje istote MVC? Zapraszam do dyskusji...