Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przekazywanie danych o sciezce plikow widoku do kontrolera, Dont Repeat Yourself. Jak ?
jacekkobus
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 4.09.2009

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


Czesc.

Zaprezentuje na przykladach:
To narazie mam:
  1. #(jestesmy w kontrolerze akcji)
  2. $widok = Some_View('index/plik.phtml');
  3. $widok->setScriptsDirectory('application/tutaj_modul/view/scripts/tutaj_kontroler');
  4.  
  5. (...)
  6.  
  7. return $widok->render();


A chce:
  1. #(jestesmy w kontrolerze akcji)
  2. $widok = Some_View('index/plik.phtml');
  3. return $widok->render();


Pierwsze rozwiazanie to oczywiste zlo. Przy okazji kazdy nowy widok (klasa Some_View) wymagalby takiej samej procedury,
co przy podziale strony na osobne elementy - z uzyciem layoutu, stanowilo by spore uniedogodnienie.

Jak byscie rozwiazali ten problem ?

Mam kontroler frontowy, rejestr, w kontrolerze akcji mam rowniez dostep do obiektu request. Obiekt request ma dostep do nazwy kontrolera, akcji i modulu.
W zendzie rozwiazane jest to na zasadzie ... pluginu. I nie do konca to pojmuje.

Teoretycznie moglbym zrobic jeszcze:

  1. $widok = Some_View('index/plik.phtml', $this->request);


... i wydedukowac sciezke do ow plikow widoku z tego, co daje mi request, ale to tez wydaje sie byc srednim rozwiazaniem.
Nie chcialbym angazowac tutaj (wewnatrz Some_View) zmiennych statycznych. Powinienem ?

W sumie prosilbym o przyklad jakiegos wzorca. Stosowane praktyki...

Myslalem nad fabryka inicjalizowana w bootstraperze, ktora przekazywana by byla do kontrolera akcji i produkowala widoki wstrzykujac im
te opcje konfiguracyjne, ale tu mam inny dylemat - gdzie ow fabryke przechowac. We froncie, a moze w rejestrze, a moze ma byc statyczna ...

Bede wdzieczny za pomoc.

Ten post edytował jacekkobus 19.01.2010, 22:40:10
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jacekkobus
post
Post #2





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 4.09.2009

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


Ok dzieki.

Z tego co widze, sciezki do plikow masz "wbite" na stale, i modyfikujesz je uzywajac danych wejsciowych z konstruktora.
Tego wlasnie chce tez uniknac. Ja raczej zmierzam ku temu aby w bootraperze zdefiniowac kilka wariantow scizek, bo widoki moge
chciec przelaczac (np skorki itd), a pozniej w kontrolerze akcji przelaczac sie podajac tylko nazwe zestawu.

wygladalo by to tak

bootstrap.php
Layout::addScriptSource('default', 'application/scripts/default');
Layout::addScriptSource('bubbles', 'application/:module/scripts/bubbles');
Layout::setDefault('default');

a uzycie w Action_Controller:

Layout::using('bubbles');
$view = new Some_View('stopka.phtml'); // czyta plik application/:module/scripts/bubbles/stopka.phtml
Layout::using('default');
$view = new Some_View('stopka.phtml'); // czyta plik application/scripts/stopka.phtml

(:module to zmienna, ktora podmieniam na nazwe aktualnego modulu...)


Ogolnie troszke dziwnie Ci to wyszlo. Nie myslales, zeby np.: "addJs" wylaczyc do osobnego obiektu, helpera czy tez pluginu ?
Ja mam klase Object_Header ktora rozszerza klase Some_View i ow obiekt zawiera metody addJs, addCss, setTitle itd.

Wtedy robie:

$strona = new Some_View('strona.phtml');

$strona->header = new Object_Header();
$strona->header->setTitle('tytul strony');

return $strona->render();

Formularze na przyklad rowniez sa u mnie rozszerzeniem klasy widoku, z tym ze zawieraja metody odpowiadajace za dodawanie pol itd...

Ten post edytował jacekkobus 20.01.2010, 15:19:24
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: 18.10.2025 - 04:15