【问题标题】:Keeping Grails validation code in domain objects将 Grails 验证代码保存在域对象中
【发布时间】:2013-01-24 16:46:45
【问题描述】:

我见过的许多 Grails 控制器示例向您展示了如何向传入和传出视图的命令类添加验证代码,如下所示:

class RegisterCommand {
    String username
    String email

    static constraints = {
         username blank: false, nullable: false, validator: { value ->
             !User.findByUsername(value) }

         email blank: false, nullable: false, email: true
    }
}

这很好,但如果我们需要在另一个控制器中验证用户,可能会导致代码重复。因此,Grails 为您提供了从域类中导入验证规则的选项,如下所示 -

static constraints = {
    importFrom User
}

所以在这里,我的验证规则是从我的User 类中提取的。

这确实有助于 DYR 原则,但是如果我想有条件地从域类中导入验证规则怎么办?因此,例如,如果有人选中了表格上的一个框,说他们想通过邮寄方式收到小册子,我只想验证表格上的地址字段。我已经尝试了这个主题的几个变体,但我似乎无法让它工作......这可能吗?

static constraints = {
    importFrom User
    addressCheckbox validator: { value, command -> 
        if (value) {
            importFrom Address
        }
    }
}

【问题讨论】:

    标签: validation grails groovy dns


    【解决方案1】:

    我认为它不起作用,因为 importFrom 在编译时适用于约束构建器层,但您的验证器闭包在运行时的验证阶段调用 importFrom

    【讨论】:

    • 好的,感谢您解决这个问题。但在这种情况下,在 Grails 中组织验证代码的最佳实践是什么?
    • 看看富域插件,它使您能够外部化和有选择地验证您的域类。 - grails.org/plugin/rich-domain
    猜你喜欢
    • 2012-06-11
    • 2015-01-06
    • 2011-12-06
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多