Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Widok MVP, Renderowanie roznych typow widoku
marcio
post
Post #1





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

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


Hej doszedlem do wniosku ze w moim fw widok, ogolnie warstwa prezentacji jako szablon to za malo, w sensie gdy zajdzie potrzeba na wyswietlenie innego fotmatu pdf,xml,text,csv czy json bedzie lipa i albo nie da rady albo bede musial kombinowac w kontrolerze i robic rzeczy ktorych nie powinno sie robic.

Wiec postanowilem poszerzyc fw o nowa funkcjonalnosc, oprocz widokow jako szablony mozna uzywac klasy.

Jednak nie wiem zabardzo jak to najlepiej rozwiazac do tej pory doszedlem do 2 sposobow:
-Osobna klasa widoku na kazdy format czyli News_View_Html,News_View_Xml itp...itd...
-Jedna ogolna klasa News_View implementujaca interfejs IView ktory ma metody: renderHtml,renderXml,renderJson itp..itd

Moze pokaze pseudo kod to bedzie bardziej wiadomo o co mi chodzi:
  1. interface IView {
  2.  
  3. public function render();
  4.  
  5. }
  6.  
  7. //lub
  8.  
  9. interface IView {
  10.  
  11. public function renderHtml();
  12. public function renderText();
  13. public function renderXml();
  14. public function renderJson();
  15. public function renderPdf();
  16.  
  17. }
  18.  

I potem reszta:
  1. <?php
  2.  
  3. class News_View_Html extends Html_View implements IView {
  4.  
  5. public function render() {
  6.  
  7. return $this -> Layout('news', 'components', 'admin');
  8.  
  9. }
  10.  
  11. }
  12.  
  13. class News_View_Xml extends Xml_View implements IView {
  14.  
  15. public function render() {
  16.  
  17. //implemenctacja dla xml'a
  18.  
  19. }
  20.  
  21. }
  22.  
  23. //lub jedna klasa z metodami dla kazdego typu widoku dziedziczaca po bazowej klasie view + interfejs
  24.  
  25. class News_View extends View implements IView {
  26.  
  27. //implementacja assign'ow
  28. public function setVars($vars) {
  29.  
  30. $this -> view -> AddVars($vars);
  31.  
  32. }
  33.  
  34.  
  35. public function renderHtml() {
  36.  
  37. $this -> view -> Layout('news', 'components', 'admin');
  38.  
  39. }
  40.  
  41.  
  42. public function renderXml() {
  43.  
  44. //implementacja dla xml'a
  45.  
  46. }
  47.  
  48.  
  49. //potem implementacja dla text,pdf i json jesli jest potrzeba jak nie to puste metody
  50.  
  51. }
  52.  
  53.  
  54. //klasa kontrolera
  55.  
  56. class News extends Controller implements IController {
  57.  
  58. public function Index() {
  59.  
  60. //pobieranie news'ow z modelu
  61. //ustawiane widoku dla url index.php/Home,Index,Index,html
  62.  
  63. $args = $this -> routing -> getParams();
  64.  
  65. switch($args) {
  66.  
  67. case 'html':
  68. //teraz tak albo osobna klasa dla kazdego widoku albo jedna klasa ze wszystkimi metodami
  69. $view = $this -> News_View_Html;
  70. $view -> AddVars($news);
  71. return $view -> render();
  72.  
  73. //lub
  74.  
  75. $view = this -> News_View;
  76. $view -> setVars($news);
  77. return $view -> renderHtml();
  78.  
  79. break;
  80.  
  81. case 'xml':
  82. //tutaj to samo tylko ze w formacie xml
  83. break;
  84.  
  85. }
  86.  
  87. }
  88.  
  89. }
  90. ?>

Kod pisany na szybko z palca wiec moze sa jakies bledy, to ma byc tylko taki ogolny zarys.

Chodzi o to ktore rozwiazanie jest lepsze, a moze zadne z nich i proponujecie inne...?
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: 6.10.2025 - 21:10