Как правило, вы не создаете описанные выше классы сами. Вместо этого вы сообщаете ZF3, как это сделать.
Конфигурация маршрутизации для модуля хранится в файле конфигурации module.config.php:
<?php
use Zend\Router\Http\TreeRouteStack;
return [
//...
'router' => [
'router_class' => TreeRouteStack::class,
'routes' => [
// Зарегистрируйте правила маршрутизации ...
],
'default_params' => [
// Укажите параметры по умолчанию для всех маршрутов ...
]
],
];
В строке 6 у нас есть ключ router, под которым находится подключ routes (строка 8), содержащий правила маршрутизации.
Вы можете указать, какой класс маршрутов верхнего уровня использовать (TreeRouteStack
или SimpleRouteStack
)
через параметр router_class
(строка 7). Если такого параметра нет,
используется TreeRouteStack
.
Вы также можете использовать опциональный ключ default_params
(строка 11) , чтобы определить значения по умолчанию для параметров
всех маршрутов сразу. Однако, как правило, этот ключ не используется, и умолчания определяются
на основе каждого маршрута.
Мы покажем, как извлекать параметры из маршрута позже в этой главе.
Типичный маршрут имеет имя, тип и опции:
Конфигурация для каждого маршрута под ключом routes
может иметь следующий формат:
'<route_name>' => [
'type' => '<route_type_class>',
'priority' => <priority>,
'options' => [
'route' => '<route>',
'defaults' => ]
//...
],
],
]
В плейсхолдер <route_name>
выше следует вписать имя маршрута. Имя маршрута должно быть в нижнем регистре,
например, "home" или "about". Ключ type
устанавливает полностью определенное имя класса маршрута.
Опциональный ключ priority
позволяет установить приоритет (должен быть значением типа integer)
маршрута в списке по степени важности (маршруты с более высоким приоритетом обрабатываются первыми). Если вы
не будете его включать, маршруты будут проходиться в порядке LIFO 4.
Маршруты с одинаковым приоритетом также будут проходиться в порядке LIFO. Поэтому для наибольшей эффективности следует регистрировать маршруты, которые чаще будут совпадать, в конец, а наименее распространенные - в начало.
4) LIFO (расшифровывается как Last In, First Out, «последним пришёл — первым ушёл») - способ организации элементов в стек, при котором самый верхний элемент, добавленный последним, выбирается в первую очередь.
Ключ options
определяет массив опций маршрута. Мы обсудим опции в последующих
разделах этой главы.
Для организации маршрутов в поддерево, нужно добавить ключ child_routes
к определению маршрута
и добавить дочерние маршруты под этот ключ, как показано ниже:
'<route_name>' => [
'type' => '<route_type_class>',
'priority' => <priority>,
'options' => [
//...
],
'child_routes' => [
// Добавьте дочерние маршруты.
// ...
]
],
Для организации маршрутов в цепь (вырожденное поддерево), нужно добавить ключ
chain_routes
к конфигурации маршрутов:
'<route_name>' => [
'type' => '<route_type_class>',
'priority' => <priority>,
'options' => [
//...
],
'chain_routes' => [
// Добавьте цепные маршруты.
// ...
]
],
Посмотрев на оба примера выше, вы не увидите явного использования типов
Part
иChain
, потому что они (для вашего удобства) используются ZF3 автоматически при встрече с ключамиchild_routes
иchain_routes
в конфигурации маршрутизации.
Теперь, когда вы знаете, как настраивать маршруты и организовывать их в составные структуры, давайте рассмотрим реальный пример. В чистом Zend Skeleton Application, конфигурация маршрутизации выглядит таким образом:
<?php
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;
return [
'router' => [
'routes' => [
'home' => [
'type' => Literal::class,
'options' => [
'route' => '/',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
],
],
'application' => [
'type' => Segment::class,
'options' => [
'route' => '/application[/:action]',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
],
],
],
],
//...
];
В представленной конфигурации у нас есть два правила маршрутизации: сначала маршрут "home" (строка 8), а затем маршрут "application" (строка 18).
Маршрут "home" устанавливает соответствие между пустым путем URL и действием "index" контроллера IndexController
. Например,
введите "http://localhost/" в браузере и вы увидите домашнюю страницу вашего сайта. Этот маршрут -
типа "Literal".
Маршрут "application" (типа "Segment") устанавливает соответствие между URL вида "http://localhost/application",
"http://localhost/application/about", "http://localhost/application/news", и т.д. и соответствующим
действием контроллера IndexController
. Имя действия определяется параметром "action", значение этого параметра по умолчанию - "index".
То есть, если вы не уточните действие, запрос будет послан действию "index".
Эта конфигурация соответствует TreeRouteStack (см. рисунок 5.5):
В следующих разделах мы приведем несколько примеров использования различных типов маршрутов.