Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> [PHP]MVC dziedziczenie
Szymciosek
post
Post #1





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Czy któraś z klas: Model, View czy Controller powinna po sobie dziedziczyć ?
Pytam, bo widziałem przykłady bez dziedziczenia i z dziedziczeniem i wolę zapytać smile.gif

Drugim pytaniem, na które też znalazłem kilka odpowiedzi to przełączanie widoków.
Uruchamiam index.php czyli ten podstawowy plik, a w nim uruchomienie kontrolera, który natomiast uruchamia model i widok...
Fajnie, ale co dalej ? Na razie mam zrobione www.xx.pl/index.php?view=contact i ta zmienna view jest sprawdzana w switch/case i tam mam include odpowiedni widok i uruchomienie klasy danego widoku
  1. case 'contact' :
  2. include_once('views/contact_view.php');
  3. $this->view = new Contact_View;
  4. break;


W view mam stworzone jakieś menu np
  1. private function createMenu()
  2. {
  3. echo '<a href="?view=index">Index</a><br />
  4. <a href="?view=contact">Contact</a><br /><hr />';
  5. }


Ale czy nie ma lepszego sposobu na to np przez pominięcie get czy coś ? Wiem, że jeszcze można ustawić routery na www.xx.pl/controller/action/param i wtedy tworzę kontrolery (ilość zależna od podstron), które uruchamiają różne widoki, ale to w formie takiego uproszczenia.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Pytam, bo widziałem przykłady [....] z dziedziczeniem
Tak? A to ciekawe - mógłbyś napisać która po której dziedziczyła bo jestem bardzo ciekaw jak można wpaść na taki pomysł smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


http://www.phppatterns.com/docs/design/arc...troller_pattern
tutaj np masz
class ProductController extends ProductView {


http://r.je/mvc-in-php.html tutaj już nie ma dziedziczenia jako takiego.

Ten post edytował Szymciosek 26.06.2012, 12:45:59
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




1) Po kodzie widać że jest to bardzooooo stary kod
2) M V C powinny być oddzielnymi rzeczami w żaden sposób nie dziedziczącymi po sobie. Widok to widok, a kontroler to kontroler. Równie dobrze można dziedziczyć obiekt samochód po obiekcie facet wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


A co z przełączaniem widoków ? Jakie są sposoby na to ?
Go to the top of the page
+Quote Post
krzywy36
post
Post #6





Grupa: Zarejestrowani
Postów: 370
Pomógł: 43
Dołączył: 1.12.2007
Skąd: Kędzierzyn Koźle

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


zdefiniuj "przełączanie widoków". Parsujesz url i na podstawie otrzymanych danych wybierasz kontroler i jeśli trzeba to widok i model.


--------------------
pretty as a shit.
Go to the top of the page
+Quote Post
Szymciosek
post
Post #7





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Czyli całe parsowanie url musi się odbywać w index.php, a później wybieram kontroler ?

Na razie mam tak:
index.php
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Untitled Document</title>
  6. </head>
  7. <body>
  8.  
  9. <p>MVC PHP Test</p>
  10. <?php
  11. include_once("controllers/controller.php");
  12.  
  13. $request = $_GET['view'];
  14. $Controller = new Controller($request);
  15. ?>
  16.  
  17. </body>
  18. </html>


controller.php
  1. <?php
  2.  
  3. class Controller
  4. {
  5. public $request;
  6. public $view;
  7.  
  8. public function __construct($request)
  9. {
  10. $this->request = $request;
  11.  
  12. $this->displayView();
  13. }
  14.  
  15. private function displayView()
  16. {
  17. switch($this->request)
  18. {
  19. case 'index' :
  20. include_once('views/index_view.php');
  21. $this->view = new Index_View;
  22. break;
  23. case 'contact' :
  24. include_once('views/contact_view.php');
  25. $this->view = new Contact_View;
  26. break;
  27. default :
  28. include_once('views/index_view.php');
  29. $this->view = new Index_View;
  30. }
  31. }
  32. }
  33.  
  34. ?>
  35. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  36. <html xmlns="http://www.w3.org/1999/xhtml">
  37. <head>
  38. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  39. <title>Untitled Document</title>
  40. </head>
  41.  
  42. <body>
  43. </body>
  44. </html>


index_view.php
  1. <?php
  2.  
  3. class Index_View
  4. {
  5. public function __construct()
  6. {
  7. $this->createMenu();
  8. $this->display();
  9. }
  10.  
  11. private function createMenu()
  12. {
  13. echo '<a href="?view=index">Index</a><br />
  14. <a href="?view=contact">Contact</a><br /><hr />';
  15. }
  16.  
  17. private function display()
  18. {
  19. echo 'This is Index';
  20. }
  21. }
  22.  
  23. ?>
  24. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  25. <html xmlns="http://www.w3.org/1999/xhtml">
  26. <head>
  27. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  28. <title>Untitled Document</title>
  29. </head>
  30. <body>
  31. </body>
  32. </html>


contact_view.php
  1. <?php
  2.  
  3. class Contact_View
  4. {
  5. public function __construct()
  6. {
  7. $this->createMenu();
  8. $this->display();
  9. }
  10.  
  11. private function createMenu()
  12. {
  13. echo '<a href="?view=index">Index</a><br />
  14. <a href="?view=contact">Contact</a><br /><hr />';
  15. }
  16.  
  17. private function display()
  18. {
  19. echo 'This is Contact';
  20. }
  21. }
  22.  
  23. ?>
  24. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  25. <html xmlns="http://www.w3.org/1999/xhtml">
  26. <head>
  27. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  28. <title>Untitled Document</title>
  29. </head>
  30. <body>
  31. </body>
  32. </html>


Niby działa i chyba ok, modelu jeszcze nie robiłem, bo dopiero zaczynam z mvc coś więcej.
Chodzi mi o to czy jest inna metoda na to niż:
  1. $request = $_GET['view'];


Pisałem wcześniej o routerach, które mogę ustawić na kontrolery, ale nie umiem tego jeszcze.
Go to the top of the page
+Quote Post
krzywy36
post
Post #8





Grupa: Zarejestrowani
Postów: 370
Pomógł: 43
Dołączył: 1.12.2007
Skąd: Kędzierzyn Koźle

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


Wydaje mi się, że źle pojmujesz MVC. MVC to sama idea dzielenia kodu na warstwy, to o co Ty pytasz to już działanie małego frameworka. Poza tym, nie identyfikuj (pojedynczych) klas z konkretnymi warstwami, bo często jest to dużo bardziej skomplikowane. Przeszukaj forum pod kątem hasła "framework" a gwarantuje, że znajdziesz odpowiedzi na swoje pytania bo już dużo takich tematów było smile.gif


--------------------
pretty as a shit.
Go to the top of the page
+Quote Post
Szymciosek
post
Post #9





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Czyli co ? MVC nie nadaje się do takich rzeczy jak przełączanie podstron i później dodanie jakiegoś działania czy coś ?
Nie zrozumiałem tego: ". Poza tym, nie identyfikuj (pojedynczych) klas z konkretnymi warstwami, bo często jest to dużo bardziej skomplikowane."

Framework frameworkiem, samo mvc też po coś zostało stworzone. Czyli na razie są tylko 2 metody "przełączania" ? $_GET i routery ?
Go to the top of the page
+Quote Post
!*!
post
Post #10





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat
Czyli całe parsowanie url musi się odbywać w index.php, a później wybieram kontroler ?

FW budujesz? To przydałaby się klasa do parsowania URI, oraz Router który uruchomi odpowiedni kontroler.
MVC wygląda mniej więcej tak, że ładujesz zawsze jako pierwszy kontroler, w nim możesz/lub nie odwołać się do modelu, dane z modelu możesz/lub nie wysłać do widoku, a czym będzie i co robił sam widok to już zależy od Ciebie.

Poszukaj na forum w dziale "PHP" było dużo o tym, jak i w pod forum o oop.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Szymciosek
post
Post #11





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Nie buduję FW biggrin.gif, ale chciałem po prostu za pomocą MVC stworzyć aplikację, która będzie miała kilka widoków i myślę nad tym jak to zrobić, pytałem już wyżej czy tylko $_GET i przekazanie zmiennej w linku to jeden z prostszych sposobów.
W ActionScript3.0 wyglądało to tak, że za pomocą switch/case wysyłałem instrukcje o zmienia widoku i stary widok był wyrzucany, a ładowany był nowy. Z tym, że w php problemem jest link.
Ciężko mi się dogadać coś w tym temacie :/
Go to the top of the page
+Quote Post
!*!
post
Post #12





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Tak, GET to najprostsze wyjście. Jednak to co prezentujesz, to mi za bardzo na MVC nie wygląda, bo gdzie masz tam model i w widoku tworzysz menu? No, można i tak, jak wolisz ;D A z tym switch, to do b.małych stron.

Ten post edytował !*! 26.06.2012, 14:02:05


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
krzywy36
post
Post #13





Grupa: Zarejestrowani
Postów: 370
Pomógł: 43
Dołączył: 1.12.2007
Skąd: Kędzierzyn Koźle

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


Cytat(Szymciosek @ 26.06.2012, 14:43:44 ) *
Czyli co ? MVC nie nadaje się do takich rzeczy jak przełączanie podstron i później dodanie jakiegoś działania czy coś ?
Nie zrozumiałem tego: ". Poza tym, nie identyfikuj (pojedynczych) klas z konkretnymi warstwami, bo często jest to dużo bardziej skomplikowane."

Framework frameworkiem, samo mvc też po coś zostało stworzone. Czyli na razie są tylko 2 metody "przełączania" ? $_GET i routery ?


MVC zakłada (upraszczając) oddzielenie warstwy logiki od warstwy prezentacji - tyle, nie myl MVC z frameworkiem. Co do "dwóch metod przełączania", zawsze możesz linkować do osobnych plików (żart, nie rób tego ohmy.gif). Hmm, $_GET i routery, nie rozumiem za bardzo, bo router (czy tam klasa parsująca URL, jakkolwiek ją nazwiemy) i tak działa na $_GET, a raczej na całym urlu i jest to najlepsza metoda, bo masz tylko jeden punkt wejścia do aplikacji. Zresztą chyba wszystkie FW tak działają.

Ten post edytował krzywy36 26.06.2012, 14:03:22


--------------------
pretty as a shit.
Go to the top of the page
+Quote Post
!*!
post
Post #14





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat
Hmm, $_GET i routery, nie rozumiem za bardzo, bo router (czy tam klasa parsująca URL, jakkolwiek ją nazwiemy) i tak działa na $_GET, a raczej na całym urlu i jest to najlepsza metoda


Router ładuje odpowiedni kontroler, na bazie odebranego URI. Całe sterowanie może być oparte na GET, o ile tak to zaimplementujesz. Chociaż nie uważam aby index.php?controller=art&method=xxx&param=23 był taki rewelacyjny, ale to już inna kwestia.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Szymciosek
post
Post #15





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


!*!, gdzie mam w takim razie tworzyć menu ? Piszesz, że nie mam modelu i menu tworzę w widoku, a za chwilę jak tam chcę, więc o co chodzi ?

krzywy36, $_GET, a chodziło mi z routerami o uproszczenie linku żeby uruchamiało mi od razu kontroler.

Mówiłem, że modelu na razie nie robiłem, bo nie korzystam na razie z danych jako tako.
Szukałem jakichś tutoriali, przykładów o mvc, ale mało coś tego jak DOKŁADNIE z tego korzystać.
Go to the top of the page
+Quote Post
!*!
post
Post #16





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Nie znajdziesz dokładnego opisu MVC, bo MVC jest tym jak sam sobie to zinterpretujesz. Menu tworzysz w widoku, ale dane do niego pobierasz z modelu (więc, ok nie doczytałem;)).

Ten post edytował !*! 26.06.2012, 14:17:41


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Szymciosek
post
Post #17





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


To może chociaż jakieś przykłady z życia wzięte ? Wiem, że na prostą stronę MVC to raczej dużo, ale w przyszłości chciałbym coś dodać, może panel admina czy coś.
Go to the top of the page
+Quote Post
!*!
post
Post #18





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


http://phpedia.pl/wiki/MVC


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Szymciosek
post
Post #19





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


To widziałem w sumie, ale czy to się jakoś nadaje do prostej strony z 5 podstronami ?
No i tutaj jest tylko odpalenie kontrolera, który dalej operuje resztą, a ja bardziej prosiłbym o coś właśnie na przykładzie 2-3 widoków
Go to the top of the page
+Quote Post
!*!
post
Post #20





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat
To widziałem w sumie, ale czy to się jakoś nadaje do prostej strony z 5 podstronami ?

W takiej formie jaką masz teraz? Nie.

Cytat
No i tutaj jest tylko odpalenie kontrolera, który dalej operuje resztą, a ja bardziej prosiłbym o coś właśnie na przykładzie 2-3 widoków

Na tym polega MVC, kontroler steruje wszystkim i to od niego ma zależeć jaki widok ma być wczytany.

Czyli u Ciebie podstrony, mogą być jakimś parametrem w metodzie kontrolera, która uruchamia konkretny widok.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
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: 19.08.2025 - 02:20