2013-12-26 6 views
20

Я начинаю работать с Zend. Я видел may_terminate в конфигурации маршрута модуля. Я не понимаю, для чего это. По ZF2 official docs,Что такое «may_terminate» в zend framework 2?

the option “may_terminate” hints to the router that no other 
segments will follow it. 

Тем не менее я не получаю значение no other segments will follow it. Что такое it? Может ли кто-нибудь объяснить это небольшим примером?

ответ

41

Опция 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

  • дом
  • дома/Foo

may_terminate = false

  • дома/Foo
+6

хорошее объяснение – Sam

+0

Вопрос только в том, правильно ли определено определение маршрута «foo»? По моему варианту это должно быть просто «foo» вместо «/ foo». Иначе у вас будет двойная косая черта. Или я ошибаюсь? – Stillmatic1985

+0

@ Stillmatic1985 Кажется, что на первый взгляд я не проверял свою конфигурацию, но видел [этот пример] (http://zf2.readthedocs.org/en/latest/modules/zend.mvc.routing.html # zend-mvc-router-http-part) в документах – AlexP