2016-07-29 11:14:06 11537次浏览 4条回答 0 悬赏 10 金钱

例如:

public function rules() {

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

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

补充于 2016-07-29 11:17

换句话说,我的疑问就是写在 safe 里的字段是要在规定场景下验证的还是所有场景下都不需要验证的?

补充于 2016-07-29 11:23

最佳答案

  • 飘逸 发布于 2016-07-29 13:08 举报

    safe验证器和其他验证器比如email,url是一个级别的,没有任何特殊之处的。如果非要说特别之处,那就是如果在相同场景下对相同的属性声明一次email规则和safe规则,那么生效的会是email。

    所以说真正决定在一个场景中一个验证器是否生效的是当前场景是否包含了该验证器所验证的属性以及该验证器的属性是否指定了生效场景。

    有如下几种主要情况及对应结果

    1。一个场景没有声明任何验证属性,仅仅是个空数组,但rules()却有无穷无尽的验证规则。 结果:使用该场景的model调用validate()不会进行任何的验证。

    2。一个场景声明了一些属性,一些属性没有声明应用场景。 结果:该场景所包含的属性如果在这些没有声明场景的属性里,则依旧会被得到验证。 所以没有声明场景的属性会得到所有声明该属性的场景的关爱。

    3。一些属性指定了应用场景,但不是该场景的另外一个场景也声明了这个属性。 结果:后者的场景无法进行验证,毕竟他的所爱已经心有所属。

    所以说楼主的email的safe 会被所有声明email属性的场景使用。但由于之前提到的email的权重比safe大。所以create和update场景呈现出来的是对email属性进行了email验证器的验证。

    2 条回复
    回复于 2016-07-29 13:27 回复

    你的回答太飘逸了,谢谢大家啊。

    回复于 2016-07-29 13:50 回复

    主要是人长得帅。不用谢啦。

    , 觉得很赞
  • 回答于 2016-07-29 11:30 举报

    on: this specifies the scenarios when the validation rule should be performed. Separate different scenarios with commas. If this option is not set, the rule will be applied in any scenario that is not listed in "except". Please see scenario for more details about this option.

    Yii 的官方解释如上,简单点讲:字段 email 在create、update场景下会验证,在除这个场景以外的其他任意场景都是safe(即不做验证)的,希望可以帮到你

    1 条回复
    回复于 2016-07-29 11:50 回复

    如果我把 ['email','safe'] 这句删掉,会正常验证吗?

  • 回答于 2016-07-29 11:54 举报

    自带的查询似乎都得添加到safe里面,难道也是经过model避免rule验证?

  • 回答于 2016-07-29 12:00 举报
    ['email','email','on'=>['create','update']],
    

    上面的就是说 在 create,update 的时候 验证 email 字段

    ['email','safe']
    
您需要登录后才可以回答。登录 | 立即注册
YiiSoEasy
CEO

YiiSoEasy 中国

注册时间:2014-11-25
最后登录:2024-03-25
在线时长:188小时51分
  • 粉丝209
  • 金钱10942
  • 威望120
  • 积分14022

热门问题