2012-02-11 63 views
2

我读过一篇文章"Understanding "Safe" Validation Rules"在Yii执行“大规模任务”时执行验证吗?

撰文称,:

要点 - 大规模的分配将只针对具有 通过一些明确的验证规则领域取得。明显的“实际”验证器 - 长度,电子邮件,所需等等 - 全部符合要求,但有些字段是自由格式和可选的,并且没有任何格式要求 - 用户可以放任何他喜欢的内容,包括离开它空白。

但有一个comment

我承认我还没有采取彻底证实了这一点的时候,但 据我记得,你是不是在 结块验证正确与任务。如果内存正确运行,当您执行大规模 赋值($ model-> setAttributes($ _ POST ['Model']))时,不会进行实际的 验证。相反,在POST每个属性/ GET 阵列,所述模型检查是否该属性是用于分配 安全(通过检查是否存在用于该 属性的验证或安全规则,而无需实际验证它) - 如果存在则它设置 的属性,如果不是,则忽略它。

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

还值得一提的是,大规模的分配和个人 分配不在实际上相当于 - 大规模分配检查 是否有每个属性验证或安全规则,而 如果你让一个单独分配($模型 - >属性= $ _POST ['Model'] ['attribute'];)不做这样的检查 - Yii假定 属性是可信的。

所以,任何可以证明这是正确的事情?

回答

6

只有具有验证规则且其类型不是“不安全”的字段才能被大量分配。然而,它并没有经过大规模的任务验证。

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

不要忘记,你可以在自己的类参考

+0

+1直接读取Yii的源代码,好,你提到的阅读源代码过于 – 2012-02-12 06:14:14

+0

是的,我读过Yii的源代码,并看到有在大规模的调整中没有任何验证。感谢您提及+1 :) – 2012-02-19 08:36:12

0

大规模转让发生在两种情况下 - 1.当您设置一个字段的验证规则。在这种情况下,该领域将通过验证。 2.当你声明该字段是安全的。在这种情况下,您可能会或可能不会有一个字段的验证规则。这项任务将不受影响。

所以正确的答案是 - '取决于'如果你有一个验证规则为字段定义或不。