2012年10月1日 星期一

Grails 中 Domain class 如何自訂驗證

Groovy 彈性的語法,總是讓人有一點不習慣,但其實抓住幾個原則就行。
先來看這個自訂驗證的範例。

  static constraints = {
     userId (unique:true , size : 3..20)
     password(
       nullable:true , 
       size : 6..8 ,
       validator :{ password , user ->
          return password != user.userId
       }      
     )
     homepage(nullable:true , url : true)
   
  }


  1. 這個例子要達到的目的就是,使用者的密碼不要和帳號一樣即可。最大的限制式本身就是一個閉包。一般的驗證常用的就是 nullable , size 啊等等的。它有一點像 Java 後來加入的動態數量參數。所以你可以想到什麼就臨時加什麼 ( 當然缺點就是編譯時期無法知道是否正確 )。
  2. 我們主要看的是在 password裡的「自訂驗證」,這個時候要加 validator : value。在 value 的部份,我們傳入一個閉包,這邊我用藍色框起來。從key :value -> validator : value -> validator : 閉包。這樣就不會覺得 {   } 的出現很突兀了。
  3. 這個validator 所用的閉包,可以接受二個參數。password 當然就是使用者傳進來的參數囉。第二個參數是user 物件,這是方便你做比較用的。簡單來說,閉包的參數就是二個,一個是password ,一個是user 物件。若你不需要用到user 物件,那只要指名 password -> 即可。
  4. 後面要回傳true or false,所以你要告訴他怎樣是成功,怎樣驗證是失敗。

沒有留言:

張貼留言