Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
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);


Po pierwsze chyba jest literowka ale mniejsza o to.

Ogolnie skoro masz dostep do nazwy kontrolera w obiekcie request to poprostu w klasie Some_View go stworz i bedziesz mial dostep do nazwy kontrolera.

Inaczej nie wiem jak pomoc bo chyba nie do konca rozumiem twoj problem.

Go to the top of the page
+Quote Post
jacekkobus
post
Post #3





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

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


Dzieki za odpowiedz.

Chodzi w sumie o przekazanie danych konfiguracyjnych (np sciezka do skryptow phtml) dla wszystkich widokow (Some_View) tak, abym nie musial tych informacji podawac przy ich tworzeniu w kontrolerze akcji.
Myslalem, ze mozna uniknac w jakis sposob uzywania singletona wewnatrz klasy widoku.

Go to the top of the page
+Quote Post
marcio
post
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Jesli cie interesuje mozesz zobaczyc jak ja to mam w moim fw http://3paste.com/hash/489792946156cf72065c09981b54203a

A tak wywoluje np widok w komponencie logowania:

  1.  
  2. //walidacja
  3.  
  4. //proces logowania
  5.  
  6. //dodawanie msg do widoku
  7.  
  8.   /*
  9.  
  10.     zwrocenie widoku do glownego layoutu strony
  11.  
  12.  */
  13. return $this -> view -> Layout('Auth', 'component', $this -> auth -> GetUserType()); 
  14.  
  15.  


Go to the top of the page
+Quote Post
jacekkobus
post
Post #5





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
marcio
post
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
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...


plugin to calkiem inna bajka.

Po co mam sobie utrudniac zycie i miec 3 klasy view 4 helpery jak i tak tego nie bede uzywal?

Klasa prosta spelnia swoje zadanie i tak ma byc pod moja implementacje jest dobra.

Formularze wole pisac na sztywno nie widze powodu zeby robic cos w stylu:

  1.  
  2. $forms = new Form();
  3.  
  4. $forms -> OpenForm('post','self');
  5.  
  6. $forms -> AddInputText('login');
  7.  
  8. //i inne badziewia
  9.  


Jak narazie takie cos mi nie upraszcza zycia tylko je komplikuje.

Jednak nie rozumiem twojego problemu masz juz opis co i jak teraz tylko to zaimplementuj i potestuj ja nie wiem jak dziala i jak wyglada twoj system wiec rozwiazanie jest bardziej subiektywne niz obiektywne, to bardziej zalezy od ciebie ma pasowac tobie nie jakiemus pr0 programiscie ktory ci powie nie tak jest do dupy.

Go to the top of the page
+Quote Post

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: 24.08.2025 - 09:03