При удачном сопоставлении, маршрутизатор (класс маршрута верхнего уровня) возвращает
некоторые параметры: "умолчания" (параметры, перечисленные в разделе defaults
конфигурации
маршрутизации) и все шаблонные параметры, извлеченные из строки URL.
В контроллере вам часто придется извлекать эти параметры. Мы уже делали это в примерах выше. В этом разделе мы подведем некоторые итоги.
Так, чтобы извлечь параметр из маршрута в методе действия контроллера,
как правило, используется плагин контроллера Params
и его метод fromRoute()
,
который принимает два аргумента: имя нужного параметра и значение, которое нужно будет
вернуть, если этого параметра нет.
Метод fromRoute()
может также использоваться для извлечения всех параметров сразу в виде массива.
Это делается вызовом fromRoute()
без передачи ему аргументов, как показано в примере ниже:
// Пример действия.
public function someAction()
{
// Получаем один параметр 'id' от маршрута.
$id = $this->params()->fromRoute('id', -1);
// Получаем все параметры маршрута сразу в виде массива.
$params = $this->params()->fromRoute();
//...
}
При удачном сопоставлении класс маршрутизатора внутренне создает экземпляр класса Zend\Router\RouteMatch
,
предоставляя методы для извлечения имени соответствующего маршрута и полученных из него параметров.
Полезные методы класса RouteMatch
перечислены в таблице 5.3:
Имя метода | Описание |
---|---|
getMatchedRouteName() |
Получает имя соответствующего маршрута. |
getParams() |
Получает все параметры. |
getParam($name, $default) |
Получает определенный параметр. |
В большинстве случаев будет достаточно использования плагина контроллера
Params
, но вы также можете использовать для этой цели объектRouteMatch
.
Для получения объекта RouteMatch
из метода действия контроллера, используйте следующий
код:
// An example action.
public function someAction()
{
// Получает объект RouteMatch.
$routeMatch = $this->getEvent()->getRouteMatch();
// Получает имя соответствующего маршрута.
$routeName = $routeMatch->getMatchedRouteName();
// Получает все параметры маршрута в виде массива.
$params = $routeMatch->getParams();
//...
}
В строке 5 этого фрагмента кода мы используем метод getEvent()
базового класса AbstractActionController
для
извлечения объекта MvcEvent
, который представляет собой событие (В ZF3 жизненный цикл приложения состоит
из событий). Затем мы используем метод getRouteMatch()
класса MvcEvent
для извлечения объекта RouteMatch
.
В строке 8 мы используем метод getMatchedRouteName()
для извлечения имени маршрута, который соответствует
HTTP-запросу, а в строке 11 мы извлекаем все его параметры.
Класс MvcEvent
также может использоваться для извлечения маршрутизатора (класса маршрута верхнего уровня). Это
можно сделать с помощью метода getRouter()
класса MvcEvent
, как показано ниже:
// Вызовите внутри метода действия
// для извлечения RouteStackInterface для класса маршрутизатора.
$router = $this->getEvent()->getRouter();
Здесь мы используем метод getRouter()
, который возвращает интерфейс RouteStackInterface
.
Этот интерфейс является базовым для SimpleRouteStack
и TreeRouteStack
и предоставляет
методы для работы с маршрутами, содержащимися внутри стека маршрутов.