我读过一篇文章"Understanding "Safe" Validation Rules"
作者说:关键点 - 仅对具有的字段进行大量分配 通过一些明确的验证规则。显而易见的“实际”验证器 - 长度,电子邮件,要求等 - 所有符合条件,但有些字段是自由格式和可选字段,并且没有任何格式要求 - 用户可以放任何他喜欢的东西,包括留空。
但是有comment:
我承认我没有花时间彻底证实这一点,但是 我记得,你把验证结合起来是不正确的 与任务。如果记忆正确,那么当你做大量的时候 赋值($ model-> setAttributes($ _ POST ['Model'])),没有实际的 验证发生。相反,对于POST / GET中的每个属性 数组,模型检查该属性是否安全分配 (通过检查是否存在验证或安全规则 属性,没有实际验证它) - 如果有,那么它设置 属性,如果没有,它会忽略它。
仅在您调用$ model-> save()(或 显式$ model-> validate()),当已经存在的属性 已使用验证规则检查已分配。
值得一提的是,大规模的任务和个人 赋值实际上并不等同 - 大量的赋值检查 是否存在每个属性的验证或安全规则,而 如果你进行个人作业($ model-> attribute = $ _POST ['Model'] ['attribute'];)没有做出这样的检查 - Yii假设 归属是可信的。
那么,任何人都可以证明哪个是正确的?
答案 0 :(得分:6)
只有在具有验证规则且其类型不“不安全”的情况下,才可以大量分配字段。但是,在大规模分配时,它没有得到验证。
当您调用validate()或调用save(true)时,它会被验证。
不要忘记您可以直接在他们的班级参考
中阅读Yii源代码答案 1 :(得分:0)
在两种情况下发生大规模分配 - 1.为字段设置验证规则时。在这种情况下,该字段将通过验证。 2.当您声明该字段是安全的时。在这种情况下,您可能有也可能没有字段的验证规则。任务将无关紧要。
所以正确的答案是 - '取决于'你是否有为该字段定义的验证规则。