Routery Part w Zend Framework 2 i sprawdzanie nazwy domeny

Uwaga! Ten wpis został napisany ponad rok temu i informacje w nim zawarte mogą być nieaktualne.

Zend Framework 2 jest już w wersji beta 3 i wielkimi krokami zbliża się faza RC i w końcu oficjalny release. Mam okazję pracować w tym frameworku przy kilku projektach i poznawać mniejsze i większe nowości, które nowe wydanie oferuje programistom. Jedną z tych mniejszych, ale bardzo ciekawych zmian jest wprowadzenie nowego typu routera adresów URL – Part.

Routery w aplikacjach webowych, to mechanizmy odwzorowujące adres żądania klienta (czyli adres wprowadzony do przeglądarki WWW) na odpowiednie zasoby systemu (w przypadku aplikacji MVC w ZF są to kontrolery akcji). Router typu Part umożliwia tworzenia zagnieżdżonych grup routingu, dzięki czemu można sprawdzać fragmenty adresów. Dokumentacja oficjalna pokazuje jak można testować część adresową URL, żeby w każdym przypadku nie duplikować początkowych fragmentów adresów. Jeszcze ciekawsze rzeczy można osiągnąć łącząc ten router z routerem domenowym.

Wyobraźmy sobie, że mamy aplikację, która ma osobny frontend dla odwiedzających użytkowników i backend do zarządzania treścią oraz obie te części znajdują się w różnych domenach (np. www.example.com i admin.example.com). Żeby móc konfigurować osobno kontrolery dla front- i backendu możmy skorzystać właśnie z kombinacji routerów part, hostname i pozostałych, bardziej standardowych. Dodatkowo, aby w jeden router połączyć niezależne ścieżki możemy skorzystać z RouteStacka – specjalnej klasy, która działa podobnie jak router, ale nie ma żadnych własnych reguł tylko sprawdza kolejne niezależne routery. Dzięki temu nie musimy tworzyć wspólnego początku ściężki i już na poziomie domeny możemy mieć zupełnie różne adresy.

W kodzie poniżej zostaną użyte następujące klasy:

Aby skonfigurować obiekt RouteStack kolejno tworzymy routing dla frontendu:

routing dla backendu:

i RouteStack:

Pozstałe części adresów (np. www.example.com/products) konfirugujemy wg schematu z wyżej wspomnianej dokumentacji.

Po wykonaniu $route->match($request); dostaniemy obiekt RouteMatch, który jako nazwę pasującej ścieżki będzie zawierał kolejne nazwy oddzielone znakiem /, czyli w powyższym przykładzie frontend/home lub backend/dashboard. Analogicznie w drugą stronę tworzyć adresy możemy przez $route->assemble(array(), array('name' => 'backend/dashboard')); gdzie w rezultacie otrzymamy pełny adres URI z protokołem i domeną (w przykładzie http://admin.example.com/).

Dodaj komentarz