Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zagadnienie co do wzorca MVC, Pobieranie danych do widoku.
Przem4S
post
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 3
Dołączył: 26.07.2010
Skąd: Tychy

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


Mianowicie czy dopuszczalne jest coś takiego że załóżmy mam kontroler setup:
  1. class Setup extends Controller
  2. {
  3. public function __construct()
  4. {
  5. parent::__construct();
  6. }
  7.  
  8. public function index()
  9. {
  10. // Zainicjowanie zmiennej która zostanie wprowadzona do widoku:
  11. $var = null;
  12. // Załadowanie modelu:
  13. $this -> load -> model('setup');
  14. $model = new Model_Setup; // Przypisanie widoku w kontrolerze
  15. $var['title'] = $model -> get_title();
  16. // Załadowanie widoku i przekazanie do niej zmiennych:
  17. $this -> load -> view('setup', $var);
  18. }
  19. }


Czyli w moim wypadku działa to tak iż Kontroler inicjuje model i widok następnie przepisuje do zmiennej w tablicy funkcję pobierającą dane z modelu i tą że zmienną umieszczam w widoku. Czyli jak by nie patrzeć widok pobiera zmienną z kontrolera a nie bezpośrednio z modelu? Czy ja się już pogubiłem? Praktycznie wszędzie pisze jako że widok ma pobierać dane z modelu, jak to ustosunkować w moim wypadku? Z góry dzięki za odpowiedzi (IMG:style_emoticons/default/smile.gif) Pozdrawiam.

Ten post edytował Przem4S 7.03.2012, 21:24:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Mimo że twoja metoda jest troszeczkę oryginalna to jest w pełni ok.

Założeniem MVC jak wiesz jest oddzielenie M od V i od C (IMG:style_emoticons/default/tongue.gif)

C powiniem miec wiedze i dostęp do M i V ale M nie powinno mieć nic wspólnego z V i na odwrót - chyba że ktoś przekaże M jako zmienna do V ;P

U Ciebie działa to tak, że C zbiera wszystkie dane, powołuje model zbiera z niego dane, następnie przekazuje je do widoku. Z podanego kodu wynika, że wszystko jest ok.

Cytat
Czyli jak by nie patrzeć widok pobiera zmienną z kontrolera a nie bezpośrednio z modelu?


I tak powinno być. To C powinien dane zwrócone przez model przekazać widokowi ... Jak niby model sam miałby je przekazać widokowi... (IMG:style_emoticons/default/questionmark.gif) Gdzie tak piszą(IMG:style_emoticons/default/questionmark.gif) Oczywiście to są ząłożenia, czasem się je nieco nagina ale zasada jest właśnie taka...

Cytat
Poprostu masz MVP


Ok skąd to się tu wzięło to nie wiem... To nie jest żadne MVP - to jest zwykłe MVC - z kodu wynika że wszelkie obowiązki są zachowane , C nic sam nie wyświetla, przekazuje dane do widoku który to powinien je wyświetlić. Gdzie tu Prezenter?

@Przem4S - wszystko jest ok (IMG:style_emoticons/default/wink.gif)

Dla przykładu jeszcze podam jakiś kawałek kodu zaciągnięty z przykładu kursu dla Zenda. jest to akcja "add" jednego z kontrolerów.

  1. function addAction() {
  2. $this->view->title = "Add New Album";
  3.  
  4. if ($this->_request->isPost()) {
  5. Zend_Loader::loadClass(’Zend_Filter_StripTags’);
  6. $filter = new Zend_Filter_StripTags();
  7.  
  8. $artist = $filter->filter($this->_request->getPost(’artist’));
  9. $artist = trim($artist);
  10. $title = trim($filter->filter(
  11. $this->_request->getPost(’title’)));
  12.  
  13. if ($artist != ” && $title != ”) {
  14. $data = array(
  15. ‘artist’ => $artist,
  16. ‘title’ => $title,
  17. );
  18. $album = new Album();
  19. $album->insert($data);
  20. $this->_redirect(’/');
  21. return;
  22. }
  23. }
  24. // set up an "empty" album
  25. $this->view->album = new stdClass();
  26. $this->view->album->id = null;
  27. $this->view->album->artist = ”;
  28. $this->view->album->title = ”;
  29.  
  30. // additional view fields required by form
  31. $this->view->action = ‘add’;
  32. $this->view->buttonText = ‘Add’;
  33. }


Jak widać kontroler sprawdza wejście, powołuje model, przekazuje jakieś dane do widoku itd... To też nie jest MVC? (IMG:style_emoticons/default/smile.gif)

P.S. Nawiasem mówiąc jeśli robisz ten framework sam - polecam dodawanie do akcji kontrolerów jakiegoś postfixa - na przykład Action tak jak w zendzie - to daje tyle, że wewnątrz wtedy masz rozróżnienie czy dana metoda jest akcją czy zwykłą metodą obiektu kontrolera (której nie można wywołać jako akcji z przeglądarki) (IMG:style_emoticons/default/wink.gif)

Ten post edytował Sephirus 8.03.2012, 09:38:55
Go to the top of the page
+Quote Post

Posty w temacie
- Przem4S   Zagadnienie co do wzorca MVC   7.03.2012, 21:23:12
- - marcio   Poprostu masz MVP   7.03.2012, 22:59:28
- - Przem4S   Mógłby się ktoś jeszcze wypowiedzieć? Ewentualnie ...   8.03.2012, 09:01:59
- - Sephirus   Mimo że twoja metoda jest troszeczkę oryginalna to...   8.03.2012, 09:37:19
- - Przem4S   Po prostu myślałem że w kontrolerze mam przypisać ...   8.03.2012, 09:40:28
- - Sephirus   Ten sposób pokazany przez Ciebie z przekazaniem mo...   8.03.2012, 09:57:26
- - marcio   CytatP.S. Nawiasem mówiąc jeśli robisz ten framewo...   8.03.2012, 10:18:16
- - Sephirus   Cytat... and formats it for display in the view. ...   8.03.2012, 10:20:06
- - marcio   Bo to nie jest kontroler lecz prezenter   8.03.2012, 10:26:47
- - Sephirus   Nie o to mi chodziło. Opisz mi co to jest format...   8.03.2012, 10:28:46
- - marcio   Tutaj masz to dobrze opisane. Chodzi glownie o ro...   8.03.2012, 10:34:19
- - Sephirus   No właśnie taką jedną znalazłem: CytatOne other b...   8.03.2012, 10:37:15
- - by_ikar   CytatNo i wlasnie tu sie chyba mylisz, poczytaj bl...   8.03.2012, 10:41:02
- - marcio   Rozumiec rozumiem ale przeczytaj calosc i spojrz n...   8.03.2012, 10:41:06
- - Przem4S   Czyli jak to rozumiec? Np w kohanie kontroler tez ...   8.03.2012, 12:29:04
- - marcio   Cytat(Przem4S @ 8.03.2012, 12:29:04 )...   8.03.2012, 12:56:09
- - Sephirus   To nie tak że wszystkie te frameworki tego nie imp...   8.03.2012, 13:06:11
- - Przem4S   Czyli rozumiem do poprawki relacja widoku z modele...   8.03.2012, 13:19:55
- - marcio   Cytat(Sephirus @ 8.03.2012, 13:06:11 ...   8.03.2012, 13:29:13


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: 14.10.2025 - 19:28