FuelPHPのvalidationは
  • 標準で用意されている検証ルールだけだと物足りない
  • 検証の結果エラーとなった場合のメッセージがいまいち。lang/ja/validation.phpで日本語にしてもいまいち。
  • 独自の検証ルールを作成するには的な感じで、今(2013/1/5)googleで検索すると、検証ルールを書いたクラスを 作成する方法がヒットするけど、クラスを作るほどじゃないし、使い回しもしない検証ルールなんだけど…と思う
ということから、validationを使うことにめげてしまいそうになります。

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的なクラスに書いてもいいかなと思いました…