2013-10-02 33 views
1

我有更新的Yii模型下面的代码:的Yii - 更新模型和使用模型的视图中的回波数据

public function actionSettings($id) { 
    if (!isset($_POST['save_hostname']) && isset($_POST['Camera']) && isset($_POST['Camera']['hostname'])) { 
     $_POST['Camera']['hostname'] = ''; 
    } 
    $model = $this->loadModel($id); 
    $model->setScenario('frontend'); 
    $this->performAjaxValidation($model); 
    if (isset($_POST['Camera'])) { 
     $model->attributes = $_POST['Camera']; 
     unset($model->api_password); 
     if ($model->save()) { 
      Yii::app()->user->setFlash('success', "Camera settings has been saved!"); 
     } else { 
      Yii::app()->user->setFlash('error', "Unable to save camera settings!"); 
     } 
    } 
    $this->render('settings', array(
     'model' => $model, 
    )); 
} 

这工作正常,但在我的模型我有这样的代码:

<h1>Settings For: <?php echo CHtml::encode($model->name); ?></h1> 

问题是,即使用户输入验证失败,h1标签也会输入错误的回音。如果输入未通过验证,则h1属性应保持不变。

我可以在返回视图之前将$ model变量重置为数据库中的内容,但这意味着我不会收到任何错误反馈/验证失败的消息。

是我唯一的选择有2个$模型(可能是$ model和$ data),一个用于处理表单,另一个用于发送数据到页面?还是有人有更优雅的解决方案?

+0

如果您将其重写为ajax提交,您可以添加对验证结果的处理,然后更新或不更新相应的DOM – ernie

回答

0

performAjaxValidation将所有保存属性分配给模型,因此此行为是正常的。 如果保存失败,我会重新加载模型。

$model->refresh();