26

我是 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。这是什么it?谁能用小例子解释一下?

4

1 回答 1

52

may_terminate选项将向路由器指示“this”路由能够仅根据其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

  • 家/富
于 2013-12-26T14:53:09.177 回答