Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MVC]Komunikacja miedzy widokiem a kontrolerem.
pinochet
post
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 12
Dołączył: 9.10.2008
Skąd: Tricity.Rumia()

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


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?
Go to the top of the page
+Quote Post
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
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: 21.08.2025 - 02:28