ZF2路由到顶层控制器

时间:2014-03-25 00:27:51

标签: routes zend-framework2 segment

请原谅我对ZF2的新意见。 我想从顶层路由到控制器...

在ZF2 Skeleton中,它的设置使得在应用之后路线被分段如下:
http://www.example.com/application[/:controller[/:action]]


但我不想通过申请路径去这样的控制器:
http://www.example.com/ [:控制器[/:动作]]

我进行了广泛的搜索,但却无法让它发挥作用。 我的module.config.php设置如下:

/* in module.config.php */

'router' => array(
    'routes' => array(
        'home' => array(
            'type'    => 'Zend\Mvc\Router\Http\Literal',
            'options' => array(
                'route'    => '/',
                'defaults' => array(
                    '__NAMESPACE__' => 'Application\Controller',
                    'controller' => 'Index',
                    'action'     => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'default' => array(
                    'type'    => 'Segment',
                    'options' => array(
                        'route'    => '/[:controller[/:action]]',
                        'constraints' => array(
                            'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                        ),
                        'defaults' => array(
                        ),
                    ),
                ),
            ),
        ),
    ),
),


'controllers' => array(
    'invokables' => array(
        'Application\Controller\Index' => 'Application\Controller\IndexController',
        'Application\Controller\Login' => 'Application\Controller\LoginController',
    ),
),

如果我浏览到http://www.example.com/login,则表示"请求的网址无法与路由匹配。"我想我错过了基本概念...... =(

2 个答案:

答案 0 :(得分:1)

子路由连接到父路由。这意味着最终您要定义以下可能的路线:

http://example.com//:controller/:action

注意双浸正斜线。如果所有子路由参数都是可选的并且名称空间没有变化,那么将它们定义为child_route是没有意义的,只会使它最终变慢。

答案 1 :(得分:0)

在Sam的指导下,我能够弄清楚:

'router' => array(
    'routes' => array(
        'home' => array(
            'type'    => 'Segment',
            'options' => array(
                'route'    => '/[:controller[/:action]]',
                'constraints' => array(
                    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                ),
                'defaults' => array(
                    '__NAMESPACE__' => 'Application\Controller',
                    'controller' => 'Index',
                    'action'     => 'index',
                ),
            ),
        ),
    ),
),