Опция may_terminate
указывает маршрутизатору, что этот «маршрут» может быть согласован только с его значением route
; даже если он определяет child_routes
.
Рассмотрим следующую конфигурацию маршрута.
'router' => [
'routes' => [
'home' => [
'type' => 'literal',
'options' => [
'route' => '/home',
],
'may_terminate' => false,
'child_routes' => [
'foo' => [
'type' => 'literal',
'options' => [
'route' => '/foo',
],
],
],
],
],
],
Существует некоторая неопределенность в приведенной выше конфигурации, которая встречается только с маршрутами, определяющими детей. Мы хотим разрешить нашим пользователям сопоставлять два маршрута или только один?
Мы могли бы согласовать только часть /home
; что означало бы, что у нас есть два маршрута: /home
и /home/foo
или мы можем только хотеть разрешить /home/foo
.
Здесь используется опция may_terminate
. Если мы посмотрели на /home
в нашем браузере, когда маршрутизация происходит, маршрутизатор не может рассматривать маршрут home
как подходящий маршрут, как may_terminate = false
. В терминологии ZF2 маршрутизатор не может «завершить» на этом маршруте и продолжает поиск соответствия в child_routes
, что не удастся и ошибка 404 будет поднята.
Таким образом, изменяя значение параметра may_terminate
в приведенном выше примере, мы можем изменить маршруты, на которые можно сопоставить.
may_terminate = true
may_terminate = false
хорошее объяснение – Sam
Вопрос только в том, правильно ли определено определение маршрута «foo»? По моему варианту это должно быть просто «foo» вместо «/ foo». Иначе у вас будет двойная косая черта. Или я ошибаюсь? – Stillmatic1985
@ Stillmatic1985 Кажется, что на первый взгляд я не проверял свою конфигурацию, но видел [этот пример] (http://zf2.readthedocs.org/en/latest/modules/zend.mvc.routing.html # zend-mvc-router-http-part) в документах – AlexP