Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Jak powinien wyglądać kontroler / router ?
snaers
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
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&parametr=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.
Go to the top of the page
+Quote Post

Posty w temacie
- snaers   [PHP] Jak powinien wyglądać kontroler / router ?   24.03.2011, 22:29:42
- - PlayKiller   Router -> Controler (korzysta z Model) -> Vi...   24.03.2011, 22:35:44
|- - lukaskolista   Cytat(PlayKiller @ 24.03.2011, 22:35...   25.03.2011, 08:52:30
- - snaers   Racja, źle to pytanie zadałem. Jak zrobić ten rout...   24.03.2011, 22:39:27
|- - fifi209   Cytat(snaers @ 24.03.2011, 22:39:27 )...   24.03.2011, 22:43:23
- - snaers   Ok, ok, ale wciąż nie bardzo wiem jakbym miał taki...   24.03.2011, 22:46:48
- - thek   Router pobiera URL i parsuje go. Na podstawie tego...   24.03.2011, 23:01:59
- - snaers   Czyli mam do tego użyć $_SERVER['REQUEST_...   24.03.2011, 23:06:45
- - everth   Symfony w diagramach UML. Poprzeglądaj sobie jak t...   24.03.2011, 23:07:52
- - fifi209   Odpowiedni rewrite RewriteRule .* index.php?costa...   24.03.2011, 23:07:59
- - snaers   Symfony trochę oglądałem od strony kodu, ale to zd...   24.03.2011, 23:22:01
- - Crozin   @PlayKiller, @fifi209, @thek: A co ma router do od...   24.03.2011, 23:48:18
- - snaers   No dzięki, ale dalej nie wiem jak się do tego zabr...   25.03.2011, 00:13:18
- - thek   Zastosowalem za duży skrót myślowy. Postaram to ni...   25.03.2011, 01:10:48
- - thek   Lukaskolista... Dobrze, że zastrzegłeś o tym MVC i...   25.03.2011, 09:22:58
- - snaers   A MVC w Symfony jest poprawne? Na tej podstawie mo...   25.03.2011, 10:37:00
- - thek   By nauczyć prawidłowo wzorcy czytaj dokumentację. ...   25.03.2011, 11:24:20
- - snaers   Ja też nie wiem jak to działa, bo to jest przykład...   25.03.2011, 12:16:48
- - thek   No przecież masz gotowy prosty router... Co więcej...   25.03.2011, 12:27:59
- - snaers   Nie chciałem gotowca tylko naprowadzenie. Dalej po...   25.03.2011, 12:44:54
- - thek   Ale o to chodzi, że nie wiemy nic o Twoim kodzie. ...   25.03.2011, 13:41:27
- - snaers   No tak, masz rację. Nie podałem nic, bo nic nie ma...   25.03.2011, 14:16:15
- - Crozin   Cytat- Chcę zbudować samochód, jak to zrobić? - Zo...   25.03.2011, 14:59:35
- - snaers   Ale mi nie o to chodzi! Od początku tego temat...   25.03.2011, 15:07:28
- - thek   Ale jak nie? Opisaliśmy Ci jak działa router wraz ...   25.03.2011, 16:42:28
- - snaers   Napisałeś, że nie wiecie jak u mnie wygląda cała s...   25.03.2011, 17:19:37
- - Crozin   Nie, nie chodzi o kilka linijek kodu. Ale oczywiśc...   25.03.2011, 17:34:30
- - thek   O przepraszam... Na PW Ci napisałem więcej niż tyl...   26.03.2011, 02:04:49


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: 4.10.2025 - 11:49