什么是zend框架2中的'may_terminate'?

时间:2013-12-26 13:15:03

标签: php zend-framework2 zend-route zend-router

我是Zend的初学者。我在模块路由配置中看到了may_terminate。我不明白它的用途。根据{{​​3}},

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

我仍然没有得到no other segments will follow it的含义。这里的 it 是什么?有人可以用小例解释吗?

1 个答案:

答案 0 :(得分:47)

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

  • 家/富