【问题标题】:Yii - updating a model and using the model to echo data in the viewYii - 更新模型并使用模型在视图中回显数据
【发布时间】:2013-10-02 15:31:06
【问题描述】:

我有以下代码用于更新 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(可能是 $model 和 $data),一个用于处理表单,另一个用于向页面发送数据?还是有人有更优雅的解决方案?

【问题讨论】:

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

标签: php validation model yii


【解决方案1】:

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

$model->refresh();

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 2014-08-21
    相关资源
    最近更新 更多