以前は主に PHP を使用していたので、フォームにカスタム検証シナリオを追加する最良の方法は何かという質問があります。ドメイン内にすべての制約があるとしますが、フォームがドメインにバインドされている特定のコントローラー アクションの下で、何らかのカスタム検証を追加したいとします (議論のために、日付があり、このシナリオでは、2 週間以上先になるはずです)。それを行うための最良のアプローチは何ですか?
ありがとう!
以前は主に PHP を使用していたので、フォームにカスタム検証シナリオを追加する最良の方法は何かという質問があります。ドメイン内にすべての制約があるとしますが、フォームがドメインにバインドされている特定のコントローラー アクションの下で、何らかのカスタム検証を追加したいとします (議論のために、日付があり、このシナリオでは、2 週間以上先になるはずです)。それを行うための最良のアプローチは何ですか?
ありがとう!
必要に応じて、制約付きのコマンド オブジェクトを使用できます。
@grails.validation.Validateable
class CommandObject {
Date date
static constraints = {
date(/*constraint here*/)
}
}
編集:
2 番目の質問については、はい、を使用してドメイン オブジェクトからコマンド オブジェクトに制約を共有できます。importFrom [EntityName]
ドキュメントの例を参照してください。
ドメイン オブジェクト:
class User {
String firstName
String lastName
String passwordHash
static constraints = {
firstName blank: false, nullable: false
lastName blank: false, nullable: false
passwordHash blank: false, nullable: false
}
}
コマンド オブジェクト:
class UserCommand {
String firstName
String lastName
String password
String confirmPassword
static constraints = {
importFrom User
password blank: false, nullable: false
confirmPassword blank: false, nullable: false
}
}
コントローラーに到達する前に、jquery を使用してフォームの検証を行うことをお勧めします。必要に応じて、gsp 自体で個別の検証を行うこともできます (つまり、入力フィールドが必須であることの確認、電子メールのみの受け入れ、整数のみの受け入れなど)。コントローラーでこれを行うこともできます。しかし、jqueryを使ったフォームバリデーションはもう十分だと思います:)