Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]wzorzec MVC i instancje
Forum PHP.pl > Forum > Przedszkole
Oczko21
Witam,
Wiem ze temat wzorca MCV byl walkowany setki razy, wiekszosc z tych tematow przeczytalem, ale powiem szczerze ze zamiast pomoc, bardziej zagmatwaly to zagadnienie. Zrobilem cos takiego:

Kontroler
  1. class PageController {
  2.  
  3. public function CheckAccess($logged)
  4. {
  5. if($logged == 1)
  6. return $logged;
  7. else
  8. return false;
  9. }
  10. }


Model
  1. class PageModel {
  2. private $access;
  3. private $makePage = '';
  4. private $pagePart;
  5.  
  6. public function GeneratePage($logged)
  7. {
  8. $this->access = $logged;
  9. if($this->access == true){
  10. $this->makePage .= $this->MakeHeader();
  11. $this->makePage .= $this->MakeBody(1);
  12. $this->makePage .= $this->MakeFooter();
  13. }else{
  14. $this->makePage .= $this->MakeHeader();
  15. $this->makePage .= $this->MakeBody(0);
  16. $this->makePage .= $this->MakeFooter();
  17. }
  18. return $this->makePage;
  19. }
  20.  
  21. public function MakeHeader()
  22. {
  23. $this->pagePart = '
  24. /*
  25. kod strony
  26. */';
  27. }else{
  28. $this->pagePart ='
  29. /*
  30. kod strony
  31. */
  32. ';
  33. }
  34. return $this->pagePart;
  35. }
  36.  
  37. public function MakeFooter()
  38. {
  39. $this->pagePart = '
  40. /*
  41. kod strony
  42. */
  43. ';
  44. return $this->pagePart;
  45. }
  46.  
  47. public function __toString()
  48. {
  49. return $this->makePage;
  50. }
  51. }


Widok
  1. class PageView {
  2. private $page;
  3.  
  4. public function DisplayPage($page)
  5. {
  6. $this->page = $page;
  7. return $this->page;
  8. }
  9. }


index.php
  1. <?
  2. require_once("page/pageController.php");
  3. require_once("page/pageModel.php");
  4. require_once("page/pageView.php");
  5.  
  6. $pageController = new PageController;
  7. $status = $pageController->CheckAccess($_SESSION['login']);
  8. $pageModel = new PageModel;
  9. $pageModel->GeneratePage($status);
  10. $pageView = new PageView;
  11. echo $pageView->DisplayPage($pageModel);
  12. ?>


1. Czy mniej wiecej tak wyglada wzorzec MVC?
2. Czytalem artykul ktory jest umieszony na glownej stronie dotyczacy MVC (dokladnie mowiac przyklad z wykorzystaniem arkuszy stylow) i mam pytanie:
  1. //fragment kodu wlasnie z tego artykulu
  2. public function __construct(PageController $pageController){
  3. $this->pageController=$pageController;
  4. $this->controllerStyle=$pageController->getStyle();
  5. }

Dlaczego jako parametr w konstruktorze, podany jest PageController? Domyslam sie ze jest to odwolanie do instancji, klasy PageController, ktora w tamtym przykladzie byla kontrolerem. Ale po co/dlaczego? Kiedy nalezy uzywac takich odwolan?
3. Dlaczego abym mogl wyswietlic strone musialem uzyc magicznej funkcji __toString? Wiem ze ona konwertuje dane do typu string, ale dlaczego to jest konieczne, przeciez zmienna $makePage jest stringiem.
4. Prosilbym rowniez o wytkniecie najmniejszych bledow, chcialbym od samego poczatku uczyc sie poprawnej formy uzywania tego wzorca.
Neeke
MVC - jak już wiesz to model widok kontroller.

Zasada działania MVC jest taka że controler pobiera rządanie czyli np. adres http i GET następnie przekazuje do re-questa który filtruje dane i zwraca tablice.
Na tej podstawie odpalany jest widok i model w modelu pobierasz dane z baz danych a w widoku je obsadzasz. następnie zwracają do kontrolera i kontroler już to wyświetla.

To co ty napisałeś też nie jest złe każdy ma swój styl pisania MVC. Nie zapominajmy że piszą aplikację nawet strukturalnie i przepuszczając wszystko przez jeden plik mamy już swój kontroler w wersji prymitywnej.

@ad 2

  1. //fragment kodu wlasnie z tego artykulu
  2. public function __construct(PageController $pageController){
  3. $this->pageController=$pageController;
  4. $this->controllerStyle=$pageController->getStyle();
  5. }


PageControler w tym przypadku ma za zadanie dopuścić tylko elementy z jego struktury. czyli z innej klasy nie będzie mogły dostać się dane.

@ad3 Magiczna fikcja prze konwertuje całą strukturę strony na ciąg znaków typu string. o tym trzeba poczytać w manualu.

Wskazywać błędów nie będę ale ja zalecał bym popatrzenie jak wykonują to zaawansowane framewoki np. kochana albo zend.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.