W Zend Framework 3 dostępne są cztery podstawowe typy routingu:
Literal Route: Ta trasa dopasowuje zadaną ścieżkę bez uwzględniania dodatkowych zmiennych. Przykładowo, ścieżka
/aboutzostanie dopasowana tylko do trasy zdefiniowanej z takim samym adresem.
// Definicja trasy:
$router->addRoute('about', [
'type' => Literal::class,
'options' => [
'route' => '/about',
'defaults' => [
'controller' => 'Application\Controller\IndexController',
'action' => 'about',
],
],
]);
// Przykład użycia:
// Dopasuje tylko do adresu http://example.com/about
W powyższym przykładzie zdefiniowaliśmy trasę o nazwie 'about’, która dopasuje się tylko do adresu http://example.com/about. Trasa ta nie akceptuje żadnych dodatkowych zmiennych, ale definiuje kontroler i akcję, które mają być wywołane, gdy zostanie dopasowana.
- Segment Route: Ta trasa dopasowuje segmenty w adresie URL jako zmienne w trasie. Przykładowo, ścieżka
/users/123zostanie dopasowana do trasy/users/:id, gdzie:idzostanie zmapowane na wartość123.
// Definicja trasy:
$router->addRoute('users', [
'type' => Segment::class,
'options' => [
'route' => '/users/:id',
'defaults' => [
'controller' => 'Application\Controller\UserController',
'action' => 'view',
],
'constraints' => [
'id' => '\d+',
],
],
]);
// Przykład użycia:
// Dopasuje do adresów http://example.com/users/123, http://example.com/users/456 itd.
// Parametr :id zostanie zmapowany na wartość liczbową.
W tym przykładzie zdefiniowaliśmy trasę o nazwie 'users’, która dopasowuje do adresów URL z segmentem users i wartością zmiennej id. Zmienna ta jest ograniczona do wartości liczbowych przez wyrażenie regularne. Trasa ta definiuje kontroler i akcję, które mają być wywołane, gdy zostanie dopasowana.
- Regex Route: Ta trasa dopasowuje adres URL za pomocą wyrażeń regularnych. Można tym samym dokładnie dopasować określone ciągi znaków w adresie URL.
// Definicja trasy:
$router->addRoute('blog', [
'type' => Regex::class,
'options' => [
'regex' => '/blog/(?P\d{4})/(?P\d{2})/(?P[a-z0-9-]+)',
'defaults' => [
'controller' => 'Application\Controller\BlogController',
'action' => 'view',
],
'spec' => '/blog/%year%/%month%/%slug%',
],
]);
// Przykład użycia:
// Dopasuje do adresu http://example.com/blog/2022/03/my-blog-post
// Zmienne year=2022, month=03 i slug=my-blog-post zostaną przekazane do kontrolera.
W tym przykładzie zdefiniowaliśmy trasę o nazwie 'blog’, która dopasuje do adresu URL zgodnego z wyrażeniem regularnym. Trasa ta definiuje trzy zmienne – year, month i slug – które zostaną przekazane do kontrolera, gdy trasa zostanie dopasowana.
- Wildcard Route: Ta trasa dopasowuje do wszystkich adresów URL, które nie zostały dopasowane do innych tras. Jest to opcjonalna trasa, która jest używana jako ostatnia trasa, kiedy żadna inna trasa nie zostanie dopasowana.
// Definicja trasy:
$router->addRoute('catchall', [
'type' => Wildcard::class,
'options' => [
'defaults' => [
'controller' => 'Application\Controller\IndexController',
'action' => 'not-found',
],
],
]);
// Przykład użycia:
// Dopasuje do każdego adresu URL, który nie został dopasowany przez inne trasy.
// Przekieruje na akcję not-found kontrolera IndexController.
W tym przykładzie zdefiniowaliśmy trasę o nazwie 'catchall’, która dopasuje się do każdego adresu URL, który nie został dopasowany przez inne trasy. Ta trasa definiuje tylko domyślny kontroler i akcję, która ma zostać wywołana, gdy zostanie dopasowana. Jest to użyteczne do obsługi błędów 404, gdy żaden inny routing nie jest w stanie dopasować adresu URL.
Dodatkowo w Zend Framework 3 istnieją również inne typy tras, takie jak Child Routes, który umożliwia grupowanie tras w hierarchiczne struktury, a także Caching Route, który umożliwia buforowanie tras, aby zmniejszyć czas ładowania strony.
Wybór odpowiedniego typu trasy zależy od wymagań Twojej aplikacji. Na ogół zaleca się stosowanie prostych tras typu Literal lub Segment, chyba że jest to konieczne, wtedy można stosować bardziej złożone trasy typu Regex lub Child.