page_adsence

2015年12月28日月曜日

Laravel4系のカスタムバリデートの作り方

基本的な作り方に関しては公式サイトに書いてあるのですが、日本語で残しておきたかったので書いておきます。

https://laravel.com/docs/4.2/validation#custom-validation-rules

カスタムバリデータクラスの設置場所は自由で、今回はcomposerで管理する用のライブラリを作成したので、下記のディレクトリに配置しました。
/vendor/vendor_name/package_name/src/vendor_namespace/Validator/CustomValidator.php
<?php namespace TEST\Validator;

class CustomValidator extends \Illuminate\Validation\Validator {

    public function validateTest($attribute, $value, $parameters)
    {
        // バリデート処理
        // OKの場合はtrueを返す
        
        // NGの場合はfalseを返す
    }

    public function replaceTest($message, $attribute, $rule, $parameters)
    {
        // バリデートNGの時に表示するメッセージを編集する
        return $message;
    }

}

元になるルールを作成
$ vi /vendor/vendor_name/package_name/src/vendor_namespace/config/rules.php
<?php
return array(

    // 入力チェック
    'input_rules' => array(
        'name'    => 'required|test',
        'email'   => 'required',
        'message' => 'max:2000',
    ),
);

元になるメッセージを作成
$ vi /vendor/vendor_name/package_name/src/vendor_namespace/config/messages.php
<?php
return array(

    'test' => 'エラーです。',

);

利用する側は下記の様に記述する。
$rules = Config::get('package_name::rules.input_rules');
$messages = Config::get('package_name::messages.test');
$validator = \Validator::make(Input::all(), $rules, $messages);
if ($validator->fails()) {
    var_dump($validator->messages());
}
さらに下記ファイルの最後に追記する。
vi app/start/global.php

/**
 * カスタムバリデータの登録
 */
Validator::resolver(function($translator, $data, $rules, $messages)
{
    return new Test\Validator\CustomValidator(
        $translator, $data, $rules, $messages);
});
以上で使える様になるはず。