1

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 つの $models (おそらく $model と $data) を持つ唯一のオプションは、フォームの処理とページへのデータの送信に使用されますか? または、誰かがよりエレガントなソリューションを持っていますか?

4

1 に答える 1

0

performAjaxValidation はすべての保存属性をモデルに割り当てるため、この動作は正常です。保存に失敗した場合は、モデルをリロードします。

$model->refresh();
于 2013-10-03T08:09:27.950 に答える