所以我有一个名为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(
),
),
),
答案 0 :(得分:3)
尝试了解路由的作用。您要访问的child_route
称为default
。因此,基本路线必须是
$this->url('user/default');
但是,由于未分配defaults
,您还需要声明controller
和action
所需的参数。意味着您的路线必须看起来像这样:
$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()
。当然,您应该考虑仅针对此路线下的所有控制器使用此操作。