为什么我的ZF2 Segment子路由被忽略?

时间:2015-04-25 12:58:04

标签: php routes zend-framework2

我的项目中有以下路由配置:

'router' => array(
    'routes' => array(
        'home' => array(
            'type' => 'Zend\Mvc\Router\Http\Literal',
            'options' => array(
                'route' => '/',
                'defaults' => array(
                    '__NAMESPACE__' => 'MyApp\Controller',
                    'controller' => 'Default',
                    'action' => 'default',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'api' => array(
                    'type' => 'Zend\Mvc\Router\Http\Segment',
                    'options' => array(
                        'route' => 'api/:action[/:id]',
                        'defaults' => array(
                            '__NAMESPACE__' => 'MyApp\Controller',
                            'controller' => 'Api',
                            'action' => 'index',
                        ),
                    ),
                    'may_terminate' => true,
                ),
                'default' => array(
                    'type' => 'Zend\Mvc\Router\Http\Segment',
                    'options' => array(
                        'route' => '[:id]',
                        'defaults' => array(
                            '__NAMESPACE__' => 'MyApp\Controller',
                            'controller' => 'Default',
                            'action' => 'default',
                        ),
                    ),
                    'may_terminate' => true,
                ),
            ),
        ),
    ),
),

当我拨打http://localhost/api/foo/bar时,我会收到DefaultController的回复。我已经剥离了我的应用程序,直到这是唯一的路由(删除home / default,并使其成为应用程序的唯一路由)但它被忽略。

期望的结果是调用/ api ...转到Api控制器,但所有其他调用都转到默认控制器。

据我所知,没有错误被抛出(查看apache2日志)

关于可能出错的任何建议?

1 个答案:

答案 0 :(得分:1)

我认为这是因为您的默认路由ID没有约束,所以它匹配所有内容。尝试在默认路由后添加此内容。

'constraints' => ['id' => '[0-9]'],