![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 24.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam, postanowiłem trochę pobawić się w PHP obiektowo, przyszedł czas na MVC i o ile z modelem i widokiem raczej problemów nie mam to nie wiem jak poprawnie zrobić kontroler.
Mam stronę z: - show.php - edit.php - add.php - admin.php Normalnie to na początku wyświetlałem index.php, no i potem linkami, ale to to nie jest kontroler, więc jak to rozegrać? Na stronie index.php mam wywołać klasę kontrolera? A jak potem w tym pliku kontrolera to zrobić? Przejrzałem kilka frameworkow, ale to mi jeszcze bardziej namieszało, więc prosiłbym o takie najprostsze naprowadzenie jakby to miało wyglądać. Pozdrawiam! (IMG:style_emoticons/default/smile.gif) Ten post edytował snaers 24.03.2011, 22:39:54 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Zastosowalem za duży skrót myślowy. Postaram to nieco łopatologiczniej ( choć także nieco po łebkach ) wyjaśnić...
Dostajesz żądanie do aplikacji, zazwyczaj wspomniane żądanie http, w najróżniejszej postaci. Jest ono kierowane do front kontrolera, który decyduje co z nim zrobić. Jeśli dostaje je już w zjadliwej formie, kieruje wprost do dispatchera. Przykładem takiego czegoś byłoby żądanie z jawnym wywołaniem pliku i jego parametrami get, a więc index.php?action=cos¶metr=param Jeśli forma nie jest zjadliwa, czyli przykładowo index.php?/cos/param to wszystko, co przyszło musi zostać "przetłumaczone" na formę zrozumiałą dla dispatchera. W tym miejscu wskakuje router. On tłumaczy dla dispatchera, który na podstawie przetworzonego żądania wie co wywołać i z jakimi parametrami. To on przechowuje reguły, dzięki którym wie, że taki a taki ciąg odpowiada w rzeczywistości za odwołanie do określonego kontrolera z danymi parametrami. Tę wiedzę przekazuje do dispatchera, który to ów kontroler już wywołuje. Co do kodu to router najczęściej jest kawałkiem, który obrabia otrzymane żądanie (najczęściej jest to URL żądania lub parametry z linii komend) do postaci obiektu lub tablicy z danymi o kontrolerze i jego parametrach. Często jest to realizowane poprzez wyrażenia regularne lub podobne im funkcjonalnie mechanizmy. Podam przykład... www.domena.pl/obiekt/nazwa/id/ Router wie że ma domyślnie dzielić to co za nazwą domeny po / i po kolei są to kontroler, metoda, parametry i stąd otrzyma tablicę ( kontroler => obiekt, metoda => nazwa, parametry => id ) i w takiej formie przekazuje ją dispatcherowi. Może mieć jednak inne reguły. Przykładowo istnieje w nim reguła, że dla takiej konstrukcji, jest niejawnie wywoływana metoda show. Czyli tak naprawdę powinno tam być www.domena.pl/obiekt/show/nazwa/id/ i w formie tablicy ( controler => obiekt, metoda => show, parametry => ( nazwa, id) ) rzuca ją do dispatchera. W ten sposób działa routing. Dostaje on żądanie i porównuje z wzorcami. Jesli dopasuje, obrabia i zwraca dispatcherowi. Jeśli nie, to stosuje regułę domyślną i też zwraca dispatcherowi. Routera nie interesuje nic innego niż owa konwersja. To czy kontroler, metoda lub parametry istnieją - nie obchodzi go. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 11:49 |