ECサイト運営開発記

PHPフレームワーク Laravelの使い方を中心とした通販サイトの開発日記

Laravelのバリデーションの日本語化など。

Webアプリでは欠かせない重要な機能。入力値の検証いわゆるバリデーション。もちろん、Laravelにも、バリデーション機能があるわけで。
一応、備忘録として、日本語化の方法なども含めて、簡単に残しておこうと思う。

  • 下準備
    • application/config/application.phpを編集
      • Application Languageをjaに設定。別にjpでもOK。
        • "language"=> "ja"
    • application/language/ディレクトリに ja という名前のディレクトリを作成
      • application/language/ja/にapplication/language/en/にあるvalidation.phpをそのままコピーする下準備は一応ここまで。
  • 以下、入力検証アクションのサンプル
<?php 

  // 入力検証アクション
  public function action_validate(){

    // 入力値
    // すべての入力値が連想配列で取得できる。
    $input = Input::all();

    // バリデーションルール
    $rules = array(
        "name"  => "required|min:5|max:60",
        "email"  => "required|email",
    );

    // 検証
    $validation = Validator::make($input, $rules);

    // 検証結果
    if ($validation->fails()){
        // エラーの場合
        Session::flash("action_message","入力値に問題があります。");
        Session::flash("action_errors",$validation->errors->all());
        return Redirect::back()->with_input();
    }else{
        echo "Success!!";
    }

  }
?>
    • 上のコードは何をやっているか?
      • $input = Input::all(); で入力値を連想配列で取得。
      • $rules = array(); で検証ルールを設定
      • Validator::make($input, $rules);でオブジェクトを作成。
      • $validation->fails()で失敗かどうか判定
      • 入力値に問題がある場合は呼び出し元へリダイレクト
        • return Redirect::back()->with_input(); はとても幸せになれる魔法のコードだと思ってる。
          • リダイレクトすると共に、入力値を引き継げるメソッドだから。
          • View内でInput::old("name")って呼び出すと、保持された入力値が表示できる。ただし、リロードすると消える。
  • 肝心の日本語化は?
    • 下準備の時点でコピーしたapplication/language/ja/validation.phpを見ればなんとなくわかるはず!
<?php 
return array(
	"accepted"       => "The :attribute must be accepted.",
	"active_url"     => "The :attribute is not a valid URL.",
	"after"          => "The :attribute must be a date after :date.",
	"alpha"          => "The :attribute may only contain letters.",
	"alpha_dash"     => "The :attribute may only contain letters, numbers, and dashes.",
);
?>
    • お好みの日本語でどうぞ
    • :attribute には HTMLフォームで指定した name 属性が勝手に入ることになる。
      • これも日本語にしたいって?
        • ご心配なく、同ファイル内に↓これを書けばいい。
<?php 

"attributes" => array(
	"name"=>"お名前",
	"email"=>"メールアドレス",
	"address"=>"住所",
)

?>
    • 簡単でしょ?

とりあえず、今日はこれまで。