Я начинаю работать с Zend. Я видел may_terminate
в конфигурации маршрута модуля. Я не понимаю, для чего это. Согласно официальным документам ZF2 ,
the option “may_terminate” hints to the router that no other segments will follow it.
Тем не менее, я не понимаю смысла, что no other segments will follow it
. Что здесь? Может ли кто-нибудь объяснить это небольшим примером?
Параметр 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
опция may_terminate
. Если мы просматриваем /home
в нашем браузере, когда происходит маршрутизация, маршрутизатор не может рассматривать home
маршрут как подходящий маршрут, как may_terminate = false
. В терминологии ZF2 маршрутизатор не может «завершаться» на этом маршруте и продолжает поиск соответствия в child_routes
, что не удастся, и ошибка 404 будет повышена.
Поэтому, изменив значение параметра may_terminate
в приведенном выше примере, мы можем изменить маршруты, на которые можно сопоставить.
may_terminate = true
may_terminate = false