2012-02-11 61 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.當你聲明該字段是安全的。在這種情況下,您可能會或可能不會有一個字段的驗證規則。這項任務將不受影響。

所以正確的答案是 - '取決於'如果你有一個驗證規則爲字段定義或不。