登录YII后如何重定向用户?

时间:2013-06-07 12:24:15

标签: yii

我已登录此操作:

    // if it is ajax validation request
    if(isset($_REQUEST['ajax']) && isset($_REQUEST['users']))
    {
            //echo CActiveForm::validate($model);

            $model->attributes=$_REQUEST['users'];

            $result = array();

            if($model->validate() && $model->login())
            {
                    // MONGO - START
                    DPoints::app()->dailyLogin(Yii::app()->user->id); 
                    // MONGO - END

                    $result['status'] = 'success';
                    $user = users::model()->findByPk(Yii::app()->user->id);
                    if($user->role == 'admin')
                    {
                            $result['url'] = Yii::app()->createUrl('/admin/questions');
                    }
                    else
                    {
                            $result['url'] = Yii::app()->createUrl('/user/dashboard'); 
                    }
            }
            else
            {
                    $result['status'] = 'failed';
                    $errors = $model->getErrors();
                    $result['errormessage'] = $errors;              
            }
            echo json_encode($result);
          //  $this->redirect('http://www.teddfel.hu/question/igaz-hogy-ebben-az-evben-nem-lesz-igazi-nyarunk_11289');
            return;
    }

我已经读过某个地方,我应该{i} $this->redirect(Yii::app()->user->returnUrl);来重定向用户。但在我的示例中,我应该在哪里使用该重定向用户?登录完成后,我想重定向用户。

2 个答案:

答案 0 :(得分:0)

根据你的例子,你应该在if($model->validate() && $model->login())之后的任何地方重定向,如果你不想要的话,那就是非ajax。

因为这意味着用户已成功登录。

if(isset($_POST['LoginForm']))
      {
        $model->attributes=$_POST['LoginForm'];
        // validate user input and redirect to the previous page if valid
        if($model->validate() && $model->login())
        {
          $this->redirect('http://www.google.com');
        }
      }

答案 1 :(得分:0)

如果是AJAX请求,您将无法强制从控制器重定向。相反,您需要使用相同的AJAX处理响应。例如:

$.ajax({
    // implementation goes here
    success: function(response) {
        var result = $.parseJSON(response);
        if (result.status === 'success') {
            document.location.href = result.url;
        }
    }
})

而且,Yii为您提供了更好的方法来检查它是否是一个AJAX请求:

if (Yii::app()->request->isAjaxRequest) {}