谁一开始就是大神?

验证规则rules里面的safe是什么作用?[2.0]

例如:

public function rules() {

        return [
            ['email','email','on'=>['create','update']],
            ['email','safe']
        ]
}

这么写,那么字段 email 是所有场景都不验证呢还是说在 只有在 create、update 的场景下才会验证。

safe验证器和其他验证器比如email,url是一个级别的,没有任何特殊之处的。如果非要说特别之处,那就是如果在相同场景下对相同的属性声明一次email规则和safe规则,那么生效的会是email。
所以说真正决定在一个场景中一个验证器是否生效的是当前场景是否包含了该验证器所验证的属性以及该验证器的属性是否指定了生效场景。
有如下几种主要情况及对应结果
1。一个场景没有声明任何验证属性,仅仅是个空数组,但rules()却有无穷无尽的验证规则。 结果:使用该场景的model调用validate()不会进行任何的验证。
2。一个场景声明了一些属性,一些属性没有声明应用场景。 结果:该场景所包含的属性如果在这些没有声明场景的属性里,则依旧会被得到验证。 所以没有声明场景的属性会得到所有声明该属性的场景的关爱。
3。一些属性指定了应用场景,但不是该场景的另外一个场景也声明了这个属性。 结果:后者的场景无法进行验证,毕竟他的所爱已经心有所属。
所以说楼主的email的safe 会被所有声明email属性的场景使用。但由于之前提到的email的权重比safe大。所以create和update场景呈现出来的是对email属性进行了email验证器的验证。
Yii 的官方解释如上,简单点讲:字段 email 在create、update场景下会验证,在除这个场景以外的其他任意场景都是safe(即不做验证)的,希望可以帮到你
自带的查询似乎都得添加到safe里面,难道也是经过model避免rule验证?
上面的就是说 在 create,update 的时候 验证 email 字段

赞(0) 打赏
未经允许不得转载:菜鸟之家 » 验证规则rules里面的safe是什么作用?[2.0]

评论 抢沙发

登录

找回密码

注册