在Yii中执行"大规模分配"时是否执行了验证?

Leo*_*orf 2 validation yii

我读过一篇文章"理解"安全"验证规则"

作者说:

关键点 - 仅对已通过某些显式验证规则的字段进行批量分配.明显的"实际"验证器 - 长度,电子邮件,要求等 - 都符合条件,但有些字段是自由格式和可选字段,并且没有任何格式要求 - 用户可以放置他喜欢的任何内容,包括将其留空.

但有评论:

我承认我没有花时间对此进行彻底的确认,但据我记忆,你在使用作业进行验证时并不正确.如果内存正确,当你进行大量赋值($ model-> setAttributes($ _ POST ['Model']))时,不会进行实际的验证.相反,对于POST/GET数组中的每个属性,模型检查该属性是否对分配是安全的(通过检查该属性是否存在验证或安全规则,而不实际验证它) - 如果有,则设置属性,如果不是它忽略它.

只有在使用验证规则检查已分配的属性时,才会调用$ model-> save()(或显式$ model-> validate())进行验证.

还值得一提的是,大规模分配和个人分配实际上并不相同 - 大规模分配检查每个属性是否存在验证或安全规则,而如果您进行单独分配($ model-> attribute = $ _POST ['Model '] ['attribute'];)没有进行这样的检查 - Yii假定归属是可信的.

那么,任何人都可以证明哪个是正确的?

Nei*_*gan 6

只有在具有验证规则且其类型不"不安全"的情况下,才能大量分配字段.但是,它不会在大规模分配时验证.

它在您调用validate()或调用save(true)时进行验证.

不要忘记您可以直接在类参考中阅读Yii源代码