Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 40)
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
Szymciosek
post
Post #21





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

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


Cytat(!*! @ 26.06.2012, 16:06:56 ) *
W takiej formie jaką masz teraz? Nie.

To w jakiej formie ? Mógłbyś to jakoś zaprezentować, nie proszę o gotowce tylko krótki opis, a ja później dam to do oceny.

Cytat(!*! @ 26.06.2012, 16:06:56 ) *
Czyli u Ciebie podstrony, mogą być jakimś parametrem w metodzie kontrolera, która uruchamia konkretny widok.

Czyli do kontrolera mogę przekazać poprzez np __construct zmienną jakiWidok i wtedy na podstawie tego kontroler dalej poleci ze wszystkim, ładując wszystko co trzeba, ale wtedy gdzie wybór widoku i przekazanie do kontrolera ? W index ? Gdzie dokładniej ?


Myślałem, że to wszystko będzie bardziej proste...

Ten post edytował Szymciosek 26.06.2012, 15:14:54
Go to the top of the page
+Quote Post
!*!
post
Post #22





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

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


Widzisz, za bardzo kombinujesz i nie widzisz ideii MVC. PHP samo w sobie jako tako też jest drętwe... Zacznijmy od tego że bez jakiegoś FW dobrze tego nie zrobisz, przynajmniej tak mi się wydaje. Aby to miało ręce i nogi, wszystkie przekierowania powinny iść przez index.php

Kontrolerów w aplikacji może być kilka, nie musisz ograniczyć się do jednego (a w zasadzie nie powinieneś). Zakładając że chcesz wczytać jakieś strony, odpalasz kontroler Pages, z jego metodą getPage

  1. class Pages
  2. {
  3.  
  4. public function getPages($title);
  5. {
  6. // na podstawie $title uruchamiasz model, który pobiera jakieś dane, cokolwiek np. tablicę z menu
  7. // zapisujesz tę tablicę w zmiennej
  8. $menu = array(); //wiadomo że tu ma być coś w stylu $menu = getMenu(); aby model zwrócił return z tablicą
  9.  
  10. // przekazujesz te dane do widoku
  11. $view = new View()
  12. $view-> add($menu);
  13.  
  14. //i jak chcesz wyświetlasz
  15. $view->render();
  16.  
  17. }
  18.  
  19. }


To mniej więcej tak powinno być.Aha, i w widoku pobierasz tą tablicę i tam ją wyświetlasz w pętli, zhtml czy co tam chcesz.

Ten post edytował !*! 26.06.2012, 15:24: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
Dipter
post
Post #23





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 28.11.2010
Skąd: Kraków

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


Musisz wybrać inną logikę całej tej aplikacji, bo obecnie brniesz w złą stronę:

1. Jeśli ma być zaledwie 2-3 strony (które w dodatku mają być na sztywno ustawione) to imho nie opłaca się przerabiać tutaj wzorca MVC na wszelkie i odbiegające od niego formy, tylko wybranie czegokolwiek innego bardziej pasującego.

2. Jeśli zaś stwierdzisz, że później będziesz chciał coś powiększyć, dodać podstrony, to wtedy robisz sobie sam problem, ponieważ wszystko zacząłeś tworzyć na sztywno.

W cale nie powiedziane jest, że musisz korzystać z takich wzorców (z trzema warstwami), a nie innych skoro możesz zrobić aplikację
w oparciu o "dwie warstwy" - Jedną odpowiedzialną za logikę, a drugą za wszelkie możliwe dane i informacje. Istnieje wiele MVC - podobnych wzorców, które mogą o wiele bardziej przydać się do twojej sytuacji.



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





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

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


Na FW myślę, że za wcześnie jeszcze... Brałem się kilka dni temu za Kohana, ale właśnie trochę poległem na MVC, a do tego ta dokumentacja jest do niczego i mało artykułów na ten temat.

Co do Twojej klasy Pages to jak mam przekazać do niej title ? I skąd ma wiedzieć co za View() ma być odpalone ?

Myślałem, że MVC działa na zasadzie właśnie:
Index > Kontroler > Widok > Akcja > Kontroler > Model > Kontroler > Widok...
Czyli index uruchamia kontroler, a ten uruchamia widok (chyba, że potrzebny jest od razu model), następnie odpalany jest widok, którym użytkownik może wykonać jakąś akcję np wyświetlenie czegoś, więc Widok poprzez Akcję łączy się z kontrolerem, ten pobiera dane z kontrolera i znowu wysyła je do widoku, przy czym widok jest aktualizowany.

Co to jest render() ?

Cytat(Dipter @ 26.06.2012, 16:25:40 ) *
Musisz wybrać inną logikę całej tej aplikacji, bo obecnie brniesz w złą stronę:

1. Jeśli ma być zaledwie 2-3 strony (które w dodatku mają być na sztywno ustawione) to imho nie opłaca się przerabiać tutaj wzorca MVC na wszelkie i odbiegające od niego formy, tylko wybranie czegokolwiek innego bardziej pasującego.

2. Jeśli zaś stwierdzisz, że później będziesz chciał coś powiększyć, dodać podstrony, to wtedy robisz sobie sam problem, ponieważ wszystko zacząłeś tworzyć na sztywno.

W cale nie powiedziane jest, że musisz korzystać z takich wzorców (z trzema warstwami), a nie innych skoro możesz zrobić aplikację
w oparciu o "dwie warstwy" - Jedną odpowiedzialną za logikę, a drugą za wszelkie możliwe dane i informacje. Istnieje wiele MVC - podobnych wzorców, które mogą o wiele bardziej przydać się do twojej sytuacji.


Np jakie inne wzorce ? Nie chcę dużego FW, chcę po prostu stworzyć sobie stronę, ale nie chciałem właśnie mieć jej na sztywno jeśli masz tutaj na myśli niezmienianie treści itd, chce mieć dostęp do tego w prosty sposób, a w przyszłości stworzyć panel, w którym będę mógł sam po zalogowaniu zmieniać treści, zdjęcia itd...
Go to the top of the page
+Quote Post
Dipter
post
Post #25





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 28.11.2010
Skąd: Kraków

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


Cytat
Np jakie inne wzorce ? Nie chcę dużego FW, chcę po prostu stworzyć sobie stronę, ale nie chciałem właśnie mieć jej na sztywno jeśli masz tutaj na myśli niezmienianie treści itd, chce mieć dostęp do tego w prosty sposób, a w przyszłości stworzyć panel, w którym będę mógł sam po zalogowaniu zmieniać treści, zdjęcia itd...


Nie miałem na myśli żadnego frameworka, tylko wzorce. WZORZEC != FRAMEWORK
Wzorców jest od cholery za przeproszeniem: MVP (Tutaj klasyczny dla wielu frameworków w php), MVVM, HMVC (Znany z Kohany 3).

Na sztywno, miałem na myśli z góry ustalone widoki i kontrolery.

Z ostatniej części twojego postu wynika, że chcesz zbudować prosty CMS, w takim razie nikt nie każe korzystać z full-stack frameworka, ponieważ masz też coś takiego jak chociażby Silex.

Ten post edytował Dipter 26.06.2012, 15:38:55
Go to the top of the page
+Quote Post
!*!
post
Post #26





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

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


Zobacz sobie CodeIgniter, chyba najprostszy FW jaki powstał, jeśli w nim nie zrozumiesz MVC, to odpuść to sobie na jakiś czas.
render() - to tylko przykładowa opcja która pokazuje widok.

Cytat
Myślałem, że MVC działa na zasadzie właśnie:
Index > Kontroler > Widok > Akcja > Kontroler > Model > Kontroler > Widok...
Czyli index uruchamia kontroler, a ten uruchamia widok (chyba, że potrzebny jest od razu model), następnie odpalany jest widok, którym użytkownik może wykonać jakąś akcję np wyświetlenie czegoś, więc Widok poprzez Akcję łączy się z kontrolerem, ten pobiera dane z kontrolera i znowu wysyła je do widoku, przy czym widok jest aktualizowany.


Wszytkio kierujesz na index.php (.htacces). Na podstawie URI, Router (lub jak nie masz, to na podstawie GET, ale to i tak nie będzie dobre) uruchamia kontroler.

Cytat
Co do Twojej klasy Pages to jak mam przekazać do niej title ? I skąd ma wiedzieć co za View() ma być odpalone ?


$title to własnie parametr jaki przekazujesz do metody kontrolera, np w linku index.php?wczytajstrone=tytul tylko musisz parsować te dane z URI (paska adresu) żeby Router wiedział że ma odpalić ten kontroler z tym parametrem czyli może być to tak /page/show/tytul dla wersji z GET będzie to index.php?controller=pages&method=show&param=tytul

I tak jak napisał poprzednik MVC != framework. MVC zostało już opisane tu całkowicie, ale jego implementacja nie jest prosta w PHP i potrzebny jest jakiś FW, bo ma w sobie odpowiednie funkcje.

Ten post edytował !*! 26.06.2012, 15:43:12


--------------------
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 #27





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

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


Na razie zostańmy przy samej czystej stronie z treścią, a panel to przyszłość.
Więc co powinien mieć u mnie index ? Uruchomienie powiedzmy Default_Controller ? A w nim uruchomienie podstawowego widoku, który zawiera w sobie menu i to co ma mieć strona index ? Klikając w menu przenosi mnie na www.xx.pl/index.pl?view=contact i tym samym znowu jest uruchamiany Default_Controller, ale już z innym widokiem tak ?
Go to the top of the page
+Quote Post
!*!
post
Post #28





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

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


Implementacja MVC do takich prostych rzeczy jest po prostu nieopłacalna. bo co z tego że odpalisz Default_Controller jak nie jesteś w stanie go zmienić, przecież każda z podstron może mieć inny kontroler.

www.xx.pl/index.pl?view=contact

view to widok? To źle, bo w linku nie ma być danych o modelu czy widoku. Mają być tylko dane przekazane do kontrolera.

Ten post edytował !*! 26.06.2012, 15:47:53


--------------------
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 #29





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

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


Tak view to widok, a o czym pisaliśmy na początku tematu ? O $_GET, który przekazuje co ma być ładowane, a kontroler to odbiera.

Jak mam zacząć podstawy ? Od najprostszych rzeczy na przykładach oczywiście wszystko do coraz większych aplikacji, które mogą wykorzystywać MVC.
Chciałem stworzyć sobie stronę i nie chciałem za bardzo pisać wszystkiego w plikach index.php gallery.php contact.php tylko chciałem ładnie spróbować wykorzystać do tego celu właśnie MVC, wiem, że to mała strona jak na MVC, ale co mam od razu skakać do jakiegoś wielkiego serwisu budując go na MVC ?
Go to the top of the page
+Quote Post
!*!
post
Post #30





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

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


GEt nie może być widokiem, ani modelem. Czytaj uważnie. Może jedynie przekazywać zmienne do kontrolera np. tytył podstorny jaka ma wczytać Wsadź ten kontroler Page do index.php i odpal, tylko $title podaj $_GET['title']

Ten post edytował !*! 26.06.2012, 16:01:43


--------------------
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 #31





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

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


Mógłbyś jakiś przykład całego mvc dać ?
Skąd Pages wie co to jest new View() ? czy to po prostu tak nazwałeś ?
Go to the top of the page
+Quote Post
!*!
post
Post #32





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

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


Pages to kontroler, View to przykładowo Twoja klasa widoku.


--------------------
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 #33





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

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


  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('views/index_view.php');
  12.  
  13. class Pages
  14. {
  15. public $title;
  16.  
  17. public function __construct()
  18. {
  19. $this->title = $_GET['view'];
  20. $this->getPages($this->title);
  21. }
  22.  
  23. public function getPages($title)
  24. {
  25. // na podstawie $title uruchamiasz model, który pobiera jakieś dane, cokolwiek np. tablicę z menu
  26. // zapisujesz tę tablicę w zmiennej
  27. $menu = array(); //wiadomo że tu ma być coś w stylu $menu = getMenu(); aby model zwrócił return z tablicą
  28.  
  29. // przekazujesz te dane do widoku
  30. $view = new Index_View();
  31. //$view->add($menu);
  32. $view->add();
  33.  
  34. //i jak chcesz wyświetlasz
  35. $view->render();
  36. }
  37. }
  38.  
  39. $pages = new Pages;
  40.  
  41. //include_once("controllers/controller.php");
  42.  
  43. //$request = $_GET['view'];
  44. //$Controller = new Controller($request);
  45. ?>
  46.  
  47. </body>
  48. </html>


Tak ?

Tylko co dalej ?

Ten post edytował Szymciosek 26.06.2012, 16:21:09
Go to the top of the page
+Quote Post
krzywy36
post
Post #34





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

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


popatrz na ten kod i zastanów się czy logika programu została oddzielona od warstwy prezentacji smile.gif
Zrobie Ci małe howto, żebyś mógł to zrozumieć:
załóżmy, że mamy adres postaci
Kod
localhost/index.php?url=kontroler/akcja/param1/param2/...

idąc dalej, załóżmy, że chcemy wyświetlić newsa o konkretnym id, w tym wypadku nasz adres będzie wyglądał tak:
Kod
localhost/index.php?url=news/pokaz/45

czyli, nasz kontroler to "news", nasza akcja to "pokaz" a nasz parametr (id) to 45.
W index.php parsujesz url, aby wyciągnąć kontroler, akcję i parametry po czym uruchamiasz to np. tak:
  1. $controller = new $kontroler_z_adresu;
  2. $controller->$akcja_z_adresu($parametry_z_adresu);

W tym wypadku klasa naszego kontrolera powinna wyglądać tak:
  1. class NewsController {
  2.  
  3. // W konstruktorze tworzysz sobie model np.$model = new NewsModel;
  4.  
  5. public function pokaz($id) {
  6. $news = $this->model->pobierzNewsa($id);
  7. $view = new NewsView;
  8. $view->loadData($news);
  9. $view->render();
  10. }
  11. }


od razu mówię, że jest to tylko PRZYKŁADOWA implementacja, dodatkowo pisana z palca, modelu nawet nie pisze bo bedzie tam tylko prosta funkcja pobierajaca newsa na podstawie id a widok to znowu kwestia implementacji smile.gif

Ten post edytował krzywy36 26.06.2012, 17:02:15


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





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

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


Krzywy, próbuję to ogarnąć, dopiero teraz, ale jak zrobić automatyczne logowanie danej klasy ? tzn jest coś takiego jak __autoload, ale czy to będzie dobre w index gdzieś ? Bo bez sensu jest robienie include wszystkich kontrolerów, a później ich wybieranie...
Go to the top of the page
+Quote Post
!*!
post
Post #36





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

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


Cytat
Tak ?

Tylko co dalej ?


A gdzie odwołałeś się do metody getPages, podając jej parametr?

Cytat
jest coś takiego jak __autoload

Poczytaj o SPL (spl_autoload_register), są też gotowe klasy do tego.

Ten post edytował !*! 26.06.2012, 18:36:51


--------------------
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 #37





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

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


Witam ponownie, siadłem i stworzyłem coś takiego: http://dl.dropbox.com/u/21239599/mvc3.rar
Czy teraz jest jakoś lepiej ?
Go to the top of the page
+Quote Post
krzywy36
post
Post #38





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

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


tak na szybko:
  1. if ($url_action)
  2. {
  3. $controller->$url_action();
  4. }
  5. elseif ($url_action && $url_param) {
  6. $controller->$url_action($url_param);
  7. }


ten elseif się nigdy nie wykona smile.gif. A autoloader może includować również modele i widoki na podstawie nazwy.

Ten post edytował krzywy36 26.06.2012, 19:44:16


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





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

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


A reszta jak ? Dobrze już to by było takie coś ?
Czemu ten elseif się nie wykona ?
Co masz na myśli z modelami i widokami ? Przecież każdy kontroler steruje powiedzmy swoją grupą widoków.
Go to the top of the page
+Quote Post
krzywy36
post
Post #40





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

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


dziwnie widoki obsługujesz, ale to juz wizja programisty smile.gif u mnie np. widoki były plikami html i miałem do ich obsługi klasę "template". Generalnie każda implementacja MVC która będzie dzielić kod na 3 warstwy będzie dobra.
Co do elseif, nawet jeśli będzie ustawiona akcja i parametr to i tak wykona się pierwszy if, zamień warunki kolejnością i powinno być dobrze.
Trzecie pytanie - chodzi mi o to, że możesz tak napisać funkcję autoLoader, żebyś sam nic nie musiał includeowac.

Ten post edytował krzywy36 26.06.2012, 19:58:48


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





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

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


Co do Twojego template, to też widziałem takie klasy, muszę się im przyjrzeć, to działa chyba na zasadzie głównego szablonu i ładowania widoków (treści) do odpowiednich miejsc w szablonie ?

EDIT:
elseif już widzę, bo zawsze znajdzie mi url_action, jeśli podam już url_param

Pomyślę nad funkcją autoloadera

Może ktoś to ocenić ?

Ten post edytował Szymciosek 26.06.2012, 20:03:32
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: 22.08.2025 - 00:03