Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]wzorzec MVC i instancje
Oczko21
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.07.2009

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
Neeke
post
Post #2





Grupa: Zarejestrowani
Postów: 124
Pomógł: 16
Dołączył: 22.02.2007
Skąd: Warszawa

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 13:15