我们如何创建自己的自定义验证

时间:2014-11-03 09:51:59

标签: grails sdn

我正在使用带有SDN的数据库Neo4j的grails 2.4.3,我们不使用Grails插件,因此grails不支持Neo4j,如果我们在域包中创建域类,那么它会给我们一个错误。 所以我们在Services包中创建了我们的域。我的第一个问题是:

我们是对的,还是我们要做另一件事?

我的另一个问题是提供这个概念的验证。我们使用命令对象。所以现在我们需要一些独特的自定义验证。我知道我们可以使用Validator,但我们希望我们的逻辑只保留在Services中。那么我们可以创建这样的东西吗?

static constraints = {
        username size: 5..15
        password size: 5..15, blank: false
        userEmail email: true
        }
username email:true 
userName name:unique

1 个答案:

答案 0 :(得分:0)

我不明白你为何如此关注必须使用服务。创建使用@Validateable注释并将其用作非GORM域类的服务似乎非常奇怪。如果它工作,很酷,但它有点像开车反向工作。你会到达那里(直到你烧掉传动装置),但是看到后视镜看起来是一个压力很大的驱动装置,看到整个时间都在逆转。

为什么不把这些类放在src / groovy下的合理包中并注释那些?您只需要在Config.groovy中注册它们,例如

grails.validateable.classes = [
     com.mycompany.myapp.User, com.mycompany.dto.Account]

您可以执行唯一性检查,但不能使用标准unique约束。那与GORM联系在一起;它查看域类的表或后备存储,并运行数据存储区特定的唯一性查询,但这不适用于此处。但是你可以自己轻松地做同样的事情。使用自定义验证器:

email validator: { value, obj ->
   // run a Neo4j query checking to see if value has
   // been used, the equivalent of
   // "select count(email) from person where email=?"
   // and return false if the count is not zero
}