Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MVC] Moj poczatek / implementacja
Helios
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 8.07.2006

Ostrzeżenie: (0%)
-----


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:
  1. <?php
  2.  
  3. class Ctrl{
  4.  
  5. private $Request=false; // obiekt
  6. private $action; // nazwa akcji - nieobowiazkowa
  7. private $view; // nazwa widoku
  8. protected $model; // nazwa modelu - nieobowiazkowa
  9.  
  10. protected $objView; // obiekt widoku
  11. protected $objModel; // obiekt modelu
  12.  
  13. // konstruktor
  14. public function __construct($request){ 
  15.  
  16. // ustawianie pol klasy
  17. $this->view=$request->getParam('view');
  18. $this->view=($this->view) ? $this->view : 'main'; // ustawianie standardowego widoku
  19. // jesli zostal podany model ustawia jesli nie jest taki sam jak nazwa widoku
  20. $this->model=($request->getParam('model')) ? $request->getParam('model') : $this->view;
  21. // model z sufixem Mod
  22. $this->model.='Mod';
  23. // pobiera parametr akcji o ile zostal podany
  24. $this->action=$request->getParam('action');
  25.  
  26. // jesli zostala podana akcja laduje model i wykonuje odpowiednia czynnosc
  27. if($this->action){
  28. require_once('./models/'.$this->model.'.model.php');
  29. $this->objModel=new $this->model($request);
  30. $action=$this->action;
  31. $this->objModel->$action();
  32. do{
  33. // sprawdza czy plik konfiguracyjny akcji uwzglednia wykonanie kolejnej akcji
  34. $tmpCfg=parse_ini_file('./actions/'.$this->action.'.ini');
  35. $action=$tmpCfg['next'];
  36. // jesli tak to ja wykonuje itd.
  37. $this->objModel->$action();
  38. }while(!$tmpCfg['next']);
  39. }
  40. // laduje obiekt widoku
  41. $this->execute();
  42. }
  43.  
  44. public function execute($view=false){
  45. // sprawdza czy obiekt modelu juz istnieje czyli czy podana byla akcja
  46. if(!is_object($this->objModel)){
  47. require_once('./models/'.$this->model.'.model.php');
  48. $this->objModel=new $this->model($request);
  49. }
  50. // laduje obiekt widoku
  51. require_once('./views/'.$this->view.'.view.php');
  52. $this->objView=new $this->view($this->objModel);
  53. }
  54.  
  55. }
  56.  
  57. ?>

Zakladamy, ze uzytkownik wpisal: index.php?view=Users&action=addUser&userName=root
kontroler laduje wiec model UsersMod:
  1. <?php
  2.  
  3. class UsersMod {
  4.  
  5. public $addedUser;
  6. public $request;
  7. public $count;
  8.  
  9. function __construct($request){
  10. $this->request=$request;
  11. }
  12.  
  13. function addUser(){
  14. $this->addedUser=$this->request->getParam('userName');
  15. return true;
  16. }
  17.  
  18. function countUsers(){
  19. return $this->count++;
  20. }
  21.  
  22. function getAddedUser(){
  23. return $this->addedUser;
  24. }
  25.  
  26. function getUsersNum(){
  27. return $this->count;
  28. }
  29.  
  30. }
  31.  
  32. ?>

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:
  1. <?php
  2.  
  3. class Users {
  4.  
  5. function __construct($objModel){
  6. print 'Dodalem uzytkownika: '.$objModel->getAddedUser().' i teraz mam zarejestrowanych uzytkownikow: '.$objModel->getUsersNum();
  7. }
  8.  
  9. }
  10.  
  11. ?>


Co sadzicie o tym? Czy dobrze rozumuje istote MVC? Zapraszam do dyskusji...
Go to the top of the page
+Quote Post

Posty w temacie
- Helios   [MVC] Moj poczatek / implementacja   8.07.2006, 14:42:03
- - hwao   Jeżeli to działą, to jest dobre... Nie ma "sz...   8.07.2006, 20:31:55
- - Cysiaczek   Cóż. To zależy, czy widok ma wyciągac dane, czy ap...   8.07.2006, 21:58:18
- - ActivePlayer   @hwao co widok robi u CIebie ?   8.07.2006, 22:34:54
- - hwao   Cytat(Cysiaczek @ 8.07.2006, 22:58 ) Có...   8.07.2006, 22:49:49
- - ActivePlayer   u mnie element widok to 'class view extends sm...   8.07.2006, 22:58:19
- - Cysiaczek   Cytat(hwao @ 8.07.2006, 21:49 ) Umnie g...   8.07.2006, 23:03:10
- - Ociu   Jak na pierwsze starcie nie jest najgorzej. Jak pi...   9.07.2006, 08:19:52
- - Prph   Witam, Ostatnio napisalem (mam nadzieje) framewor...   9.07.2006, 09:54:01
- - .rh-   Witam Odgrzebuje temat, podpisuje się pod nim. Ró...   28.07.2006, 19:39:26
- - Ociu   W mvc chodzi o to, aby moduły/akcje były podzielon...   29.07.2006, 08:36:37
- - Prph   Ociu dobrze mowi Pamietaj, ze MVC to nie framewo...   29.07.2006, 10:02:16
- - .rh-   Zgadza sie, pytam, gdyz czytajac wiele artykulow ...   30.07.2006, 00:09:38
- - thornag   Cytat(Helios @ 8.07.2006, 14:42 ) i wykon...   22.08.2006, 18:53:50
- - Prph   Witam, Akcja: dobrze rozumiesz czym jest. Akcja t...   23.08.2006, 15:08:22
- - thornag   Tak to wszystko miele i mam jeszcze kilka kolejnyc...   23.08.2006, 20:57:30
- - Prph   Witam, Nie podoba mi sie u Ciebie organizacja MVC...   23.08.2006, 22:17:50
- - thornag   Hmm, duzo dalo mi to do myslania, tymbardziej ze p...   23.08.2006, 22:39:14
- - Ociu   Każdy sposób jest dobry, jeśli Ty uwa...   24.08.2006, 07:51:55
- - thornag   @Ociu No tak. Ale inni programisci mogliby stwierd...   24.08.2006, 09:35:02
- - Prph   Jak interpretowac termin kontroler, to zalezy jak ...   24.08.2006, 21:37:40
- - bim2   Przeczytałem temat i teraz ja zadam pare pytań . T...   25.08.2006, 09:07:34
- - thornag   @prph korzystajac z Twojej zyczliwosci a przedewsz...   25.08.2006, 09:26:01
- - bim2   Thormag, powiem ci że nakierowałes mnie Kod mi si...   25.08.2006, 10:02:18
- - thornag   Z tego co zrozumialem model nie ustawia widoku. Mo...   25.08.2006, 11:13:33
- - Ludvik   Trochę zbyt sztywno trzymacie się powiązania model...   25.08.2006, 11:41:22
- - bim2   Mhh, dobra to może teraz cos takieog pokaże. Fajni...   25.08.2006, 12:44:23
- - thornag   @Ludvik Czyli reasumujac i po ludzku mozna by powi...   25.08.2006, 12:44:41
- - Ludvik   Żeby rozwiać wątpliwości - blueprints mvc. Sam w d...   25.08.2006, 13:08:17
- - bim2   @thornag: Masz racje. Każdy robi MVC tak jak chce ...   25.08.2006, 13:25:39


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 09:03