如果Zf2子路由还有一个孩子,则无法正常工作。

时间:2017-08-26 11:10:09

标签: php routing zend-framework2

我正在使用zf2,我已经定义了这样的子路由。

'routes' => array(
            'test' => array(
                'type'    => 'Literal',
                'options' => array(
                    'route'    => '/test',
                    'defaults' => array(
                        '__NAMESPACE__' => 'Test\Controller',
                        'controller'    => 'Test',
                        'action'        => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'testABC' => array(
                            'type' => 'Literal',
                            'options' => array(
                                    'route'    => '/abc',
                                    'defaults' => array(
                                            'action'     => 'abc',
                                    ),
                            ),
                            'child_routes' => array(
                                    'testABCDEF' => array(
                                            'type' => 'Segment',
                                            'options' => array(
                                                    'route'    => '/def/:id',
                                                    'defaults' => array(
                                                            'action'     => 'def',
                                                    ),
                                            ),
                                    ),
                                    'testABCXYZ' => array(
                                            'type' => 'Segment',
                                            'options' => array(
                                                    'route'    => '/xyz/:id',
                                                    'defaults' => array(
                                                            'action'     => 'xyz',
                                                    ),
                                            ),
                                    ),
                             ),
                    ),
                ),
            ),
        ),

在这只有一条路线不起作用,我不知道为什么?

  • localhost / test 工作
  • localhost / test / abc 无法正常工作
  • localhost / test / abc / def / 1 工作
  • localhost / test / abc / xyz / 1 工作

1 个答案:

答案 0 :(得分:3)

问题是由于您的testABC路由缺少may_terminate选项而导致的。

如果它没有子节点,它会隐式终止,但由于它有子节点,你必须明确告知路由器可能性(就像你使用其父test路由一样。)

'testABC' => array(
    'type' => 'Literal',
    'options' => array(
        'route'    => '/abc',
        'defaults' => array(
            'action'     => 'abc',
        ),
    ),
    'may_terminate' => true, // inform the router
    'child_routes' => (
         // ...
    ),
),