2013-10-02 32 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();