私が見た多くの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
}
}
}