2

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

1 に答える 1

2

コンパイル時に制約ビルダーレイヤーで機能するため、機能していないと思いますが、実行時の検証フェーズでimportFromバリデーターのClosureが呼び出されます。importFrom

于 2013-01-24T17:09:16.807 に答える