2013-12-18 29 views
0

在我urlManager我有以下規則:如何在yii中設置動態loginUrl。通配符在網址中?

'urlManager' => array(
    'urlFormat' => 'path', 
    'rules'  => array(
     '/<slug>/<controller:\w+>'=>'<controller>/index', 
     '/<slug>/<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
     '/<slug>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', 
    ), 
), 

所以我需要的loginUrl設置爲重定向到一個動態網址:

'user' => array(
    'class'   => 'WebUser', 
    'allowAutoLogin' => true, 
    'loginUrl'  => array('/<slug>/admin/login'), 
), 

我如何可以重定向到一個動態的URL,例如作爲/test1/admin/login/test2/admin/login沒有隻是/admin/login,/*/admin/login我需要一個通配符的url?這可能嗎?

回答

0

我是這樣做的:

class Test1Module extends WebModule { 

class Test2Module extends WebModule { 

父類是這樣的:

class WebModule extends CWebModule { 

public function init() { 
    $slug = $this->getId(); 
    Yii::app()->user->loginUrl = $slug.'/admin/login'; 
} 
.... 

現在你可以使用UrlManager直接放置你想

'/<slug>/admin/login>'=>'admin/login', 

我希望你有想法

+0

謝謝,但我需要這是完全動態的,所以我不能根據需要創建模塊。 – keeg

1

當你把下面的代碼,組件/ Controller.php這樣的,

public function beforeAction($action) { 
     if (!isset($_GET['slug'])) { 
      $url = CMap::mergeArray(array(Yii::app()->controller->id . '/' . Yii::app()->controller->action->id, 'slug' => 'test1'), $_GET); 
      $this->redirect($url); 
     } 
     return parent::beforeAction($action); 
    } 

和下面的代碼到config/main.php作爲

'rules' => array(
       --- 
        '/<slug>/<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
        '/<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 

        '/<slug>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', 
        '/<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', 
      ), 

我覺得你的問題將得到解決。