LaravelのバリデーションがFuelPHPよりも良かった件
こんばんは。ファガイです。   
本日は、Laravelのバリデーションがとても楽だったので軽く紹介っぽいのを書きます。     
そもそもLaravelとは
LaravelはPHPフレームワークです。多分、現状のPHPフレームワークの中でもモジュールが疎結合に近く、非常に使い勝手が良いフレームワークとなっています。    
一応、導入に関しては別の記事で記述しております。    
Laravel4のインストールをやってみた
Laravelのバリデーション
一気に本題に入ります。    
Laravelのバリデーションは、FuelPHPのバリデーションよりも、簡略的に、かつ高機能に動作します。
基本的な部分は、kore1serverの方が翻訳されたドキュメント?をご確認下さい。
http://laravel4.kore1server.com/docs/validation
Laravelのバリデーションはココが良い!
ここからはLaravelのバリデーションの良い所を書きつつ、FuelPHPと比較します。
書き方がとても簡易的で分かりやすい。
書き方に関しては複数あるのですが、一般的に使われるであろう方式で比較します。
まずはFuelPHP。
$val = Validation::forge();
$val->add_field('email', 'Email', 'required|valid_email');
$val->add_field('password', 'Password', 'required|valid_string[alpha,numeric]|min_length[2]|max_length[8]');
$val->add_field('confirm_password', 'C_Password', 'match_field[password]');
if ($val->run())
{
    // OK
}
else
{
    // NG
}
まあこんな感じでしょうか、実際はadd_ruleで適用する人の方が多いかもですね。   
では、Laravelの方を見てみましょう。
$rules = array(
    'email' => 'required|email',
    'password' => 'required|alpha_num|min:2|max:8|confirmed'
);
$valid = Validator::make(Input:all(), $rules);
if($valid->fails())
{
    // バリデーションエラーが起きた時
}
else
{
    // OK
}
上記のような書き方をします。
rulesに入っているemailやpasswordはフィールド名、文字列として囲われている分がバリデーション規則です。
ちなみに、FuelPHPで引数を分けていた所が有りましたが、こちらもカンマで区切ることが可能です。  
このように、LaravelではFuelPHPよりも短く記述することが出来ます。
confirmedの便利さ
confirmedは凄く便利だと思っています。FuelPHPでいうmatch_fieldですね。   
元々、このメソッドは基本的にパスワード確認などに行われるのが一般的です。confirmedを使うとそれだけで終わります。   
条件としては、例えばpasswordを確認したい場合は、password_confimationという名前でフィールド名をセットしておくだけです。
いわゆる以下のような感じです。
<input type="password" name="password"> <input type="password" name="password_confimation"> ←を追加する!
後は、passwordのルールにconfirmedを付けるだけ。簡単。
欠点(見つけられてないだけかも)
現状でちょっと気になっている所だけ。
これはちょっとあれですね、FuelPHPであれば、langファイルで確保出来ました。
FuelPHPでは、valid_stringで使う文字を指定できたが、Laravelの場合は少ない。別途で関数を作る必要性が出てくる。   
ただ、FuelPHPの場合は、ちょっと文字列が長くなってしまうのが問題ですが。       
まとめ
- 個人的に、LaravelのバリデーションはFuelPHPよりも簡易であると思う
 - 元々Laravelのmakeメソッドによる間接的な呼び出しがこの場面では非常に便利だと思う。自分でロジックを手前につけたりもできるし。
 
という感じですかね。  
ではではー
  
  
  
  
コメント
> バリデーションのメッセージは個別に指定しなくてはいけない。
は
app/lang/{locale}/validation.phpを作れば解決すると思います。> 文字列に関する指定が少し弱い
に関しては FuelPHP に比べれば確かに少ないですね。対応としては正規表現か、
Validator::extendを使用して拡張することになると思います。少しでも参考になれば幸いです。
ありがとうございます!
Validator::extendは知らなかったです。参考になります。
ブログ拝見しましたが、即ブクマしておきましたー。