如何在yii中设置动态登录URL.url中的通配符


How to set a dynamic loginUrl in yii. Wildcard in the url?

在我的urlManager中,我有以下规则:

'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设置为重定向到动态url:

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

我如何重定向到动态url,如/test1/admin/login/test2/admin/login,而不仅仅是/admin/login/*/admin/login,我需要在url中使用通配符?这可能吗?

当您将以下代码放入components/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);
    }

和下面的代码配置/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>',
            ),

我认为你的问题会解决的。

我会这样做:

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',

我希望你能理解