2015-06-28 00:33:35 43220次浏览 8条回答 6 悬赏 0 金钱

$model->load($post) 还要不要 && $model->validate()一起用?
更新和添加数据的时候有区别吗?
还有 model 里没写rules的时候 load()会不会成功?load()会不会验证rules里的规则?还是要validate()的时候才验证rules?

最佳答案

  • 大裤衩子 发布于 2015-06-28 10:39 举报

    要一起用,load()只是加载数据,validate()才是验证。
    更新和添加都用save(),yii通过$model->isNewRecord 来判断是不是一条新纪录,然后调用insert()或者update()
    load()setAttributes()方法都属于批量赋值,yii为了保护数据的安全性,是禁止批量赋值的,但是当数据符合rule规则的时候就可以批量赋值了,所以没写rules就不能用load()。就算某个字段不需要什么规则,用户输入什么都可以,那么要把这个字段的规则设置safe,一般gii生成的model最后一行都是safe的。
    你可以不用validate(),因为save方法会先调用validate()再执行insert()或者update()(看源码就知道)。

    3 条回复
    回复于 2016-09-13 06:27 回复

    你说的第一句话就错了!

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
    
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    

    这里面的load()还是走验证规则的!

    回复于 2016-09-28 15:47 回复

    当你调用 save()、insert()、update() 这三个方法时,会自动调用yii\base\Model::validate()方法

    回复于 2017-04-20 20:10 回复

    在save()、insert()、update() 是会调用validate(),所以load()只加载数据这句话应该没错吧。

您需要登录后才可以回答。登录 | 立即注册
qq260101081
见习主管

qq260101081 广州

注册时间:2014-10-30
最后登录:2017-09-25
在线时长:13小时20分
  • 粉丝4
  • 金钱40
  • 威望10
  • 积分270

热门问题