2016-06-27 21:57:04 3203次浏览 2条回答 1 悬赏 10 金钱
public function rules()
{
    return [
        [['name'], 'required'],
    ];
}

这是models里的rules方法。

$form = ActiveForm::begin();
?>

<?= $form->field($model,'name')->textInput(); ?>
<?= Html::submitButton('创建') ?>

<?php ActiveForm::end();?>

这是视图中的表单,就一个name文本框。

public function actionAdd(){
    $model = new Category();
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        echo 'yes';die;
    }
    return $this->render('add',['model'=>$model]);
}

这是控制器的添加方法。

数据库就两个字段,一个id,一个name。
现在的情况是如果注释掉models中的rules方法,插入数据库的name字段是空值,如果不注释rules方法就都正常。
难道必须要有rules方法才可以吗?

最佳答案

  • 白狼栈 发布于 2016-06-28 09:47 举报

    因为你用了$model::load方法,该方法就是要把你post过来的数据赋值给rules中定义的字段。
    因此在使用load的情况下rules是必须的,即时你不做验证的话。
    如果没有rules,你post过来的数据也就类似没办法赋值给model的属性,因此结果会是null。

    , , 觉得很赞
  • 回答于 2016-06-28 09:08 举报

    必须过规则,不想验证就指定属性为save

    2 条回复
    回复于 2016-06-28 09:29 回复

    是不是load方法吧没通过验证的给过滤掉了

    回复于 2016-06-28 09:54 回复

    是的,根据rules匹配数据。如果不需要验证,就将属性设置为save

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
蓝灵焰
总监

蓝灵焰

注册时间:2015-10-06
最后登录:2019-09-27
在线时长:30小时4分
  • 粉丝7
  • 金钱4015
  • 威望0
  • 积分4315

热门问题