2014-01-29 48 views
0

所以我有一個模塊,名爲用戶,並在這個模塊內部我有一些控制器,現在我有一個註銷控制器,我想創建網址(domain.tld /用戶/註銷)在我看來這個控制器。我想是這樣的:ZF2網址視圖幫手沒有定義的路由

$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視圖助手沒有在module.config.php

定義的路由定義URL的選項

這裏是我的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(
          ), 
         ), 
        ), 

回答

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')的第一個例子實際上會創建url domain.com/user/,這對於路由器來說是一個有效的URL,但是由於缺少參數,您的controller很可能會失敗。基本上我建議你不要讓控制器部分可選,但只有動作和定義默認動作。

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

這樣,未來在所有的請求將保證始終匹配特定的控制器和它的indexAction()。當然你應該考慮只對這條路線下的所有控制器使用這個動作。

+0

Woaw,很棒的知識,真的很感激它,謝謝它的作品! – Uffo