Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MVC]Komunikacja miedzy widokiem a kontrolerem.
Forum PHP.pl > Forum > PHP
pinochet
Witam
Moje dzisiejsze pytanie dotyczy komunikacji kontrolera z widokiem w architekturze MVC. Otóż nie wiem w jaki sposób najlepiej przekazywać dane do Widoku.
Podejścia które przychodzą mi do głowy:
1. Podobnie do Smarty - poprzez Assign każdej wartości która ma zostać wyświetlona.
2. Przekazanie obiektu Envelope, który zawiera potrzebne dane.
3. Przekazanie jakiejś instancji Modelu np w read only mode

Sposoby 1 i 2 moim zdaniem nie są doskonałe dlatego, że kontroler musi posiadać wiedzę co chce wyświetlić. Wyobraźmy sobie taką zmianę w stronie: pokazanie na stronie głównej ostatnio dodanych artykułów. W podejściu 1 i 2 należy zmienić kontroler gdyż do tej pory dane o ostatnio dadanych artykułach nie były assignowane czy dodawane do koperty. No i oczywiście widok.
Podejście nr 3 będzie chyba godziło w model MVC a w dodatku nie jest chyba optymalne ze względu na bezpieczeństwo aplikacji.
Jakie rozwiązanie stosujecie w waszych aplikacjach i jak to jest zrobione w Zendach i innych Symphoniach?
thek
To może ja powiem jak to jest zrobione w Kohanie (akurat jej używam). W Kontrolerze tworzę obiekt widoku i obiekt modelu i dane z drugiego (lub jakieś wyniki) przypisuję do pierwszego. Rzucę przykład:
  1. class My_Controller extends Main_Controller {
  2. public $user;
  3. public function __construct()
  4. {
  5. parent::__construct();
  6. }
  7. function index($strona = 0) {
  8. $db = new My_Model;
  9. $view = new View('My_View');
  10. //tutaj sobie mogę coś z bazy wyciągać
  11. $view->id = $this->user->id;
  12. $view->admin = ($this->user->admin) ? 1 : 0;
  13. //wysyłanie wszystkiego do głównego szablonu (base)
  14. $this->template->kontroler = 'jakaś_wartość';
  15. $this->template->content = $view;
  16. }
  17. }

Jak widzisz mam obiekt view i znam jego parametry. Wiem, że oczekuje on na daną o nazwie $id oraz $admin. Dlatego przekazuję mu je poprzez zwykłe przypisanie do $view->id wartości $this->user->id, która przechowuje akurat w tym wypadku id usera.
Zapewne zdziwią Cię 2 ostatnie linijki za komentarzem. Jest tak, ponieważ dziedziczę po innym kontrolerze i rodzic wymaga on ode mnie podania mu zawartości kontroler i content. Dla mnie content to nic innego niż zawartość widoku, ale może to być nawet plain-text.

W Kohanie jest to więc krótko mówiąc rozwiązane tak: widok jest obiektem, do którego własności możesz przypisywać dane. Jeśli chcesz, to możesz przypisać także inny widok.
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.