没有定义路由的ZF2 url视图助手

时间:2014-01-29 19:31:55

标签: php zend-framework zend-framework2

所以我有一个名为User的模块,在这个模块中我有一些控制器,现在我有一个注销控制器,我想在我的视图中为这个控制器创建url(domain.tld / user / logout)。我试过这样:

$this->url("user",array("controller" => "logout")); //This doesn't work

我也尝试过这样:

$this->url("user/logout"); //This doesn't work since there isn't a child route defined for the user

所以我的问题是,是否有一个选项来定义url使用url视图助手而不定义module.config.php

中的路由

以下是我module.config.php

的摘要
return array(
    'router' => array(
        'routes' => array(
            'register' => array(
                'type' => 'Zend\Mvc\Router\Http\Literal',
                'options' => array(
                    'route' => '/user',
                    'defaults' => array(
                        'controller' => 'User\Controller\Index',
                        'action' => 'index',
                    ),
                ),
            ),
            'user' => array(
                'type' => 'Literal',
                'options' => array(
                    'route' => '/user',
                    'defaults' => array(
                        '__NAMESPACE__' => 'User\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(
                            ),
                        ),
                    ),

1 个答案:

答案 0 :(得分:3)

尝试了解路由的作用。您要访问的child_route称为default。因此,基本路线必须是

$this->url('user/default');

但是,由于未分配defaults,您还需要声明controlleraction所需的参数。意味着您的路线必须看起来像这样:

$this->url('user/default', array('controller' => 'Foo', 'action' => 'Bar'));

您定义user/default路线的方式也不是那么好。 $this->url('user/default')的第一个示例实际上会创建网址domain.com/user/,其中路由器是有效的网址,但由于缺少参数,您的controller很可能会失败。基本上我建议你不要让控制器部分是可选的,而只是操作和定义默认动作。

'route' => '/:controller[/:action]'
'defaults' => array(
    'action' => 'index'
)

像这样,所有进入的请求都将保证始终与特定控制器匹配,并且indexAction()。当然,您应该考虑仅针对此路线下的所有控制器使用此操作。