バリデータの使い方
agaviのバリデータの動作などについてざざっと説明しときます。
ソースを読んで書いていて動作確認はしてませんので、各機能を実際に利用する場合は鵜呑みにはせず適宜動作確認してください。動作確認が取れたら連絡していただけると幸いです。
バリデーションモードと厳密度
バリデーションマネージャはその動作モードとして下記に示す3つのバリデーションモードを持ちます。
- relaxed
- すべてのリクエストパラメータが(action, viewで)利用できる
- conditional
- バリデータが存在する場合、バリデータを通過したリクエストパラメータのみが利用できる
- strict
- バリデータを通過したリクエストパラメータのみが利用できる
またそれぞれのバリデータはエラー発生時の動作として下記の4つの厳密度(severity)を持ちます。
- info
- このバリデータでのバリデーションは失敗であっても、全体でのバリデーションには影響を与えない。また、エラーメッセージも出力されず、conditional,strictモードでも対象となるパラメータ値は削除されない。
- silent
- このバリデータでのバリデーションは失敗であっても、全体でのバリデーションには影響を与えない。また、エラーメッセージも出力されない。
- none
- silentと同様の動作
- notice
- このバリデータでのバリデーションは失敗であっても、全体でのバリデーションには影響を与えない。
- error
- バリデーションは失敗する。ただし、バリデーション動作は継続される。
- critical
- バリデーションは失敗し、直ちにバリデーション動作が中止される。
depends属性とprovides属性
バリデータはdepends属性とprovides属性を持っています。これらの属性にはスペース区切りにより複数のトークンを設定することができます。
provides属性が設定されたバリデータはバリデーションが成功すると依存マネージャ(DependencyManager)に対して指定されたトークンを設定します。
depends属性を設定されたバリデータはそのバリデータが実行される以前に、指定されたトークンすべてが他のバリデータにより依存マネージャに設定されている場合のみバリデーションを行います。バリデーションが行われなかった場合、便宜上バリデーションは成功しますが、conditional,strictモードでは対象とするパラメータは他のバリデータでバリデートされない限り削除対象となります。
演算子バリデータ
実際のバリデーションでは与えられるパラメータの値により必要とされるパラメータが変化したり、あるいは用意されているバリデータとは反対の動作を望んだりすることが出てきます。これらの要求を満たすためにはdepends-provides機構だけでは不十分です。このためAgaviでは演算子バリデータという概念を導入し、より柔軟性のあるバリデーション機能を提供しています。
演算子バリデータはサブバリデータあるいは子バリデータと呼ばれるバリデータを持ちます。演算子バリデータは自らはパラメータのバリデーションは行わず、子バリデータの結果を"演算"することによって要求されたバリデーションを実現します。
Agaviで提供されている演算子バリデータは次の4種類の論理演算バリデータです。
- AgaviNotOperatorValidator
- サブバリデータが失敗する(failed)と成功する(succeeds)
- AgaviAndOperatorValidator
- すべてのサブバリデータが成功したときのみ成功する
- AgaviXoroperatorValidator
- 2つのサブバリデータうち1つだけが成功すれば成功する
- AgaviOroperatorValidator
- 少なくとも1つのサブバリデータが成功すれば成功する