FuelPHPのvalidationは
validationのルールには無名関数を使うことができます。
※ドキュメントに書いていないじゃないか!と思ったら、any valid PHP callback and Closures in addition to the provided validation methodsと書いてありました…例しか見てませんでした…でも、多分、下にリンクをはりましたスライド、ドキュメントを見なかったら使い方がわからなかったと思います。
無名関数を使うことによって、上に書いた3つの問題を解決できます。
具体的な方法は
です。
前者の方がお勧めです。
な感じに書くと、 trim関数は全角のスペースは取り除いてくれないので「 」な入力が許可されてしまうのですが、上のような感じに書くと、全角スペースだけの入力をチェックしてくれます。
また、FuelPHPに標準で用意されている検証パターンの「match_pattern」ですと、エラーメッセージが「The field :label must match the pattern :param:1」で、すごくいまいちなのですが、無名関数を使うと、そのフォームにあったエラーメッセージを表示できてうれしいです。
※上の例は汎用性がありそうなので、無名関数じゃなくてMyValidation的なクラスに書いてもいいかなと思いました…
- 標準で用意されている検証ルールだけだと物足りない
- 検証の結果エラーとなった場合のメッセージがいまいち。lang/ja/validation.phpで日本語にしてもいまいち。
- 独自の検証ルールを作成するには的な感じで、今(2013/1/5)googleで検索すると、検証ルールを書いたクラスを 作成する方法がヒットするけど、クラスを作るほどじゃないし、使い回しもしない検証ルールなんだけど…と思う
validationのルールには無名関数を使うことができます。
※ドキュメントに書いていないじゃないか!と思ったら、any valid PHP callback and Closures in addition to the provided validation methodsと書いてありました…例しか見てませんでした…でも、多分、下にリンクをはりましたスライド、ドキュメントを見なかったら使い方がわからなかったと思います。
無名関数を使うことによって、上に書いた3つの問題を解決できます。
具体的な方法は
です。
前者の方がお勧めです。
public function validationPost()
{
$val = Validation::forge();
$val->add('name', '名前')
->add_rule('trim')
->add_rule('required')
->add_rule('min_length',1)
->add_rule('max_length',100)
->add_rule(function ($val) {
if (preg_match('/^( )+$/', $val))
{
\Validation::active()->set_message('closure', ':labelが入力されていません。labelを入力してください。');
return false;
}
return true;
});
if ($val->run())
{
return TRUE;
}
else
{
return $val->show_errors();
}
} な感じに書くと、 trim関数は全角のスペースは取り除いてくれないので「 」な入力が許可されてしまうのですが、上のような感じに書くと、全角スペースだけの入力をチェックしてくれます。
また、FuelPHPに標準で用意されている検証パターンの「match_pattern」ですと、エラーメッセージが「The field :label must match the pattern :param:1」で、すごくいまいちなのですが、無名関数を使うと、そのフォームにあったエラーメッセージを表示できてうれしいです。
※上の例は汎用性がありそうなので、無名関数じゃなくてMyValidation的なクラスに書いてもいいかなと思いました…