Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wysyłanie danych z Kontrolera do Widoku, Własny FW do nauki
adbacz
post
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Zacząłem pisac swój Framework opierając sie na MVC i możliwie największym OOP, aby następne aplikacje wychodzące z moich rąk były bardziej moja zasługą niż innych (CodeIgniter przede wszystkim). No i do pewnego momentu wszystko było ok. Teraz dwa pytania:

1. Jak przesyłać dane do widoku? Chodzi mi o powiedzmy jedną wielka tablicę asocjacyjną, w której będą pod odpowiednimi indeksami odpowiednie dane i wysłać ją do widoku, żeby tam była widoczna. Po zwykłym includowaniu pliku widoku (przez widok rozumiem większośc kodu HTML z dodatkami php) nie było widać żadnych zmiennych, i w tym problem, bo chyba tak powinno być. Czytałem kod w CI, żeb zobaczyć jak tam jest to rozwiązane, ale od czytania tego kodu rozbolała mnie głowa a najgorsze, że nic z tego nie zrozumiałem ;/

2. Jak napisać klase do ładowania innych klas? Powiedzmy, że mamy kontroler, z którego chcemy wywołać model. Możemy napisac prostą funkcję, która może wyglądać przykładowo tak:

  1. function load_class($class, $type) {
  2. if(file_exists(BASEPATH.APP_FOLDER.'\\'.$type.'\\'.$class.'.php')) {
  3. include_once(BASEPATH.APP_FOLDER.'\\'.$type.'\\'.$class.'.php');
  4. return new $class();
  5. }
  6. else {
  7. show_error('Brak pliku/klasy: '.BASEPATH.APP_FOLDER.'\\'.$type.'\\'.$class.'.php');
  8. }
  9. }

i będzie nam zwracała obiekt, który przypiszemy do zmiennej. Ale jak załadować klasę do załadowywania klas? Mam nadrzędny kontroler po którym dziedziczą wszystkie inne i jak w tych "wszystkich innych" rozwiązać ten problem? Mógłbym w każdym robić nową instancje obiektu i ładować cały plik funkcją powyżej ale czy to ma sens? I jak załadować widok? Tutaj potrzebuję odpowiedzi na pierwsz epytanie bo jak na razie stoję w miejscu. Myślałem nad rozwiązaniem stosowanym w CI, $this->nazwaKlasy->nazwaMetody() - ale jak tego dokonać?

Mógłbym prosić o jakąś pomoc albo namiary jak to wykonać? Przeszukałem juz google i tutejsze tematy o MVC ale przeważnie pisane jest o tym jak korzystać lub czy dobrze ktoś z tego (z MVC) korzysta a nie jak coś zrobić. Bardzo liczę na czyjąś pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Cytat
1. Jak przesyłać dane do widoku? Chodzi mi o powiedzmy jedną wielka tablicę asocjacyjną, w której będą pod odpowiednimi indeksami odpowiednie dane i wysłać ją do widoku, żeby tam była widoczna. Po zwykłym includowaniu pliku widoku (przez widok rozumiem większośc kodu HTML z dodatkami php) nie było widać żadnych zmiennych, i w tym problem, bo chyba tak powinno być. Czytałem kod w CI, żeb zobaczyć jak tam jest to rozwiązane, ale od czytania tego kodu rozbolała mnie głowa a najgorsze, że nic z tego nie zrozumiałem ;/


Abstrakcyjna klasa widoku (i dziedziczące po niej klasy konkretnych widoków) może posiadać tablicę w postaci klucz => wartość, gdzie klucz odpowiada zmiennej wyświetlanej w widoku, a wartość - jej zawartość.

W kontrolerze możesz ustawiać te zmienne np. tak:

  1. ... // jakis kod
  2. $this->view = new View() // deklarujemy skladowa kontrolera reprezentujaca obiekt widoku
  3.  
  4. ...
  5. $this->view->setElement('naglowek', "Witam na mojej stronie"); // ustawienie zmiennej widoku w tablicy
  6. ...



i teraz widok wywołany przez ten kontroler:
  1. <html>
  2. <head>
  3. ....
  4. </head>
  5.  
  6. <body>
  7. <h1><?=$this->getElement('naglowek')?></h1> // tu nastepuje pobranie wartosci elementu tablicy o kluczu 'naglowek'
  8. <div>
  9. lorem ipsum....
  10. </div>
  11.  
  12. ...
  13. </html>


To tylko jedno z możliwych rozwązań.
Go to the top of the page
+Quote Post

Posty w temacie


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: 4.10.2025 - 06:29