Dlaczego w frameworkach PHP stosowana jest koncepcja „route”?

31

Powodem, dla którego pytam, jest to, że skrypt PHP nie jest trasą? Na przykład, jeśli masz artykuł.php, wówczas twoja trasa to po prostu http://mysite.com/article.php .

Po co dalej abstrahować od koncepcji trasy, która już istnieje jako zwykły plik?

Ryan
źródło

Odpowiedzi:

44

Aby zrozumieć, co robi router, musisz najpierw zrozumieć, czym jest silnik przepisywania. Z artykułu w Wikipedii (moje podkreślenie):

Mechanizm przepisywania to oprogramowanie, które modyfikuje wygląd adresu URL (przepisywanie adresu URL). Przepisane adresy URL (czasami nazywane krótkimi, fantazyjnymi lub przyjaznymi dla wyszukiwarek - SEF) służą do dostarczania krótszych i bardziej odpowiednich linków do stron internetowych. Technika ta zapewnia pewien stopień oddzielenia plików używanych do generowania strony internetowej i adresu URL prezentowanego światu .

Gdy używany jest silnik przepisywania, nie ma korelacji 1: 1 między adresem URL a skryptem PHP. Przykład z tego samego artykułu:

http://example.com/wiki/index.php?title=Page_title

może być przepisany jako:

http://example.com/wiki/Page_title

Korzystanie z tej techniki ma wiele zalet . Ponieważ PHP jest zwykle ściśle sprzężone z Apache, najczęściej stosowanym silnikiem przepisywania jest mod_rewrite Apache .

Jeśli chcesz przepisać adresy URL, potrzebujesz pewnego rodzaju routingu, ponieważ routing to proces pobierania adresu URL, dzielenia go na komponenty i decydowania, jaki skrypt ma wywołać. Strona dokumentacji standardowego routera Zend Framework wyjaśnia ten proces jako:

Routing to proces pobierania punktu końcowego URI (tej części URI, który pojawia się po podstawowym adresie URL) i rozkładania go na parametry w celu ustalenia, który moduł, kontroler i działanie tego kontrolera powinny otrzymać żądanie.

Większość frameworków PHP opiera się obecnie na wzorcu MVC , a na frameworku MVC proces przebiega mniej więcej tak : *

  1. Przeglądarka wskazuje adres URL,
  2. Serwer internetowy przechwytuje żądanie i przekazuje je do wspólnego punktu wejścia, zwykle index.phpskryptu,
  3. index.php pobiera adres URL i rozpoczyna proces routingu.
  4. Adres URL jest rozkładany na parametry, gdzie pierwszy to kontroler, drugi to metoda akcji, a pozostałe są uważane za parametry dynamiczne,
  5. Jeśli istnieje klasa kontrolera pasująca do pierwszego parametru, tworzony jest obiekt kontrolera,
  6. Wywoływana jest metoda akcji, która zwykle jest funkcją obiektu kontrolera, a jej zwrot jest faktycznie zwracany do przeglądarki.

Dopasowanie parametrów do kontrolerów i metod zwykle wykorzystuje dopasowanie za pomocą wyrażeń regularnych, aby móc obsługiwać złożone i dynamiczne wzorce routingu, znane jako trasy. Dobre przykłady tras można znaleźć na stronie dokumentacji routingu URI CodeIgniter :

$ route ['dzienniki'] = "blogi";

$ route ['blog / joe'] = "blogs / users / 34";

$ route ['product / (: any)'] = "catalog / product_lookup";

$ route ['product / (: num)'] = "catalog / product_lookup_by_id / $ 1";

$routeTablica posiada wzory jak klucze i wynikające z działania jako wartości w controller/action_method/dynamic_parameterpliku PDF.

* To nie jest zamierzone jako opis procesu kanonicznego, tylko uproszczone wyjaśnienie.

Yannis
źródło
15
Powinna istnieć plakietka opisująca router mvc bez użycia pochodnej „wysyłki” ...
yannis,