yii - 如何将验证结果发送到不同的控制器操作

时间:2014-07-07 16:04:36

标签: php yii

我在actionIndex中有一个CActiveForm,它发布到actionUpdate。保存模型时(actionUpdate)我需要将验证结果(例如:空白字段错误消息)发送回ActionIndex以在表单中显示。

返回对象,但如果字段留空,则不会显示验证消息。规则设置正确。

同样为此我不使用ajax。

这是我的代码:

actionIndex() {
   if isset($_GET("id")) {
       $myformModel =$this->loadModel($_GET("id"));
       $this->render('index',
         array('myformModel' =>    $myformModel);
  }
}

actionUpdate($id){
    $model->attributes = $_POST["myformModel"];
    $model->save();

   //send results back to index. Problem is validation results do not display.
   $this->redirect(array('index','model' => $model);
}

我在myformModel中的规则

public function rules()
{

    return array(
        array('username, email', 'required','message'=> 'Please fill in blank'),
    );
}

1 个答案:

答案 0 :(得分:0)

在这种情况下,执行此操作的方法之一是使用Yii flash消息将信息从更新操作保留到重定向后的索引操作。例如,用户提交表单以更新操作,您执行所有验证,如果失败,您将获得所有错误并创建Flash消息(也称为一次性会话)并重定向到索引操作。在索引操作中你可以询问是否存在flash消息并用验证信息显示它。 我在这个场景中看到的问题是你没有简单的选项来标记无效的表单字段,你只会有错误的短信。 从我的观点来看,使用相同的动作来完成两个工作,显示表单和提交验证要好得多。在这种情况下,如果设置$ _POST [' ModelName'],您将检查操作,如果是,您将进行验证并保存。如果验证失败,您只需要允许页面加载表单,它将自动标记表单字段以查找错误,并在表单顶部显示错误摘要。 以下是代码的外观:

actionIndex() {
 if isset($_GET("id")) {
   $myformModel =$this->loadModel($_GET("id"));

   if (isset($_POST['MyFromModel'])) {
       $myformModel->attributes = $_POST['MyFormModel'];
       if ($myformModel->save()) { // do validation and save in one place
           // everything is good, do something
       }
       // let page load form, if validation is not pass it will automatic show that on    form
   }
   $this->render('index',
     array('myformModel' =>    $myformModel);
  }
}