Yii2:在html选择中更改值时,DB中的记录未更新

时间:2017-03-20 16:06:51

标签: php forms yii2

我有一个更新表单,它包含此代码 查看

<?= $form->field($model, 'type')->dropDownList([
    '0' => 'Individual',
    '1' => 'Entity',
]) ?>

动作

public function actionUpdate()
{
    $id = Yii::$app->user->id;
    $model = Page::find()->where(['user_id'=>$id])->one();

    if (!Yii::$app->user->can('UpdateOwnPage',['page'=>$model]))
    {
        throw new ForbiddenHttpException("You have no access to this page.");
    }

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect('page/'.$model->url);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}

但是我的数据库表中的值仍为0,它根本没有变化。有什么问题?

2 个答案:

答案 0 :(得分:1)

可能是您的验证规则不受尊重只是为了测试尝试使用$ model-&gt;保存(false)如果值保存  然后更好地检查验证

 if ($model->load(Yii::$app->request->post()) {
      $model->save(false)) ;
      return $this->redirect('page/'.$model->url);


  } else {
      return $this->render('update', [
          'model' => $model,
      ]);
  }

你可以通过这种方式获得validatio错误,例如:

if ($model->validate()) {
    // all inputs are valid
} else {
  // validation failed: $errors is an array containing error messages
   $errors = $model->errors;
   var_dump($errors);
 }

答案 1 :(得分:1)

这不是很好的安全实践,但你可以添加你的模型:

public function rules()
{
  $rules = [];
  $rules[] = [ $this->attributes(), 'safe' ];
  $rules[] = [ $this->attributes(), 'trim' ];

  return $rules;
}