0

我们的用户控制器中有一个 actionSearchType,如下所示:

public function actionSearchType()
{
        if (Yii::app()->user->isGuest == true)
            $this->render('login');
            else 
        $this->render('search_type');
    }

我们的 User Controller 中的 actionLogin 如下:

public function actionLogin()
{
    $model= new Users();

    // if it is ajax validation request
    if(isset($_POST['ajax']))
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }
 $this->redirect(Yii::app()->user->returnUrl);
                    }
    }
    // display the login form
    $this->render('login',array('model'=>$model));
}

目标是确保只有经过身份验证的用户才能执行搜索类型视图上的选项。当我运行此页面时,我收到一条错误消息,指出Undefined variable: model.

登录视图的片段如下:

<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
    'validateOnSubmit'=>true,
),
)); ?>

<p class="note">Fields with <span class="required">*</span> are required.</p>

<div class="row">
    <?php echo $form->labelEx($model,'username'); ?>
    <?php echo $form->textField($model,'username'); ?>
    <?php echo $form->error($model,'username'); ?>
</div>

必须采取哪些步骤来纠正上述错误并正确检查以确保我们拥有经过身份验证的用户?

更新 我更改了 actionSearchType 以呈现以下登录小部件:

 public function actionSearchType()
{
        if (Yii::app()->user->isGuest)
            $this->widget('ext.LoginWidget');
            else 
        $this->render('search_type');
    }

这确实解决了最初看到的错误。一个新问题是登录小部件在呈现时没有样式。我应该用适当的样式表类来回显我的标签,还是有更优雅的方法呢?

4

3 回答 3

2
public function actionSearchType() {
  if (Yii::app()->user->isGuest)
    $this->redirect('/user/login');

  $this->render('search_type');
}

笔记:

  • 当用户是访客时做某事,只需使用 if(Yii::app()->user->isGuest) { statement }

  • 要在用户登录时执行某些操作,只需使用 if(!Yii::app()->user->isGuest) { statement }

在第二个代码公共函数 actionLogin() 中,我认为您的右大括号比需要的多 2 个。无论如何,登录操作应如下所示:

public function actionLogin() {
    $formModel = new Login_Form; // Login_Form.php should be in models folder
    if (isset($_POST['Login_Form'])) {
        $formModel->attributes = $_POST['Login_Form'];
        if ($formModel->validate() && $formModel->login()) {
            $this->redirect('/'); // replace / with stuff like Yii::app()->user->returnUrl
        }
    }
    $this->render('login', array(
        'formModel'=>$formModel,
    ));
}
于 2012-09-27T19:41:49.177 回答
1

而不是将视图重定向到用户登录页面/操作,因此您不必重新创建它。

$this->redirect('login');
于 2012-09-27T17:38:40.077 回答
0

在您的某处,search_type您正在引用$model未移交给render()函数的变量。您需要定义该变量,否则视图将创建一个异常。

我不知道您的search_type视图期望哪个模型/类,但您需要在将其交给视图之前对其进行初始化,如下所示:

$this->render('search_type',array(
   'model' => $model,
));

这里有一个关于这个主题的好读物:了解视图渲染流程

于 2012-09-27T17:31:09.800 回答