【PHP】Laravel5でカスタムバリデーションを追加する


■環境

Laravel 5.1


Laravel5でカスタムバリデーションを追加した際の手順です。

まず、サービスプロバイダーを作成します。今回は『ValidatorServiceProvider』という名前で作る事にします。
以下コマンドを実行すると、『/app/providers/ValidatorServiceProvider.php』が生成されます。

php artisan make:provider ValidatorServiceProvider  

作成したサービスプロバイダーを『/config/app.php』に追記します。

    "providers" => [  
〜〜 省略 〜〜  
        App\Providers\ValidatorServiceProvider::class,  
〜〜 省略 〜〜  
    ],  

作成したサービスプロバーダーにバリデーションルールを記載します。
例えば以下のルールの社員番号があったとします。
・頭文字は「A」または「Z」
・2文字目以降は数字6桁

このバリデーションルールを『shainbangou』という名前のルールで登録するとこうなります。

namespace App\Providers;  
  
use Illuminate\Support\ServiceProvider;  
use Validator;  
  
class ValidatorServiceProvider extends ServiceProvider  
{  
    public function boot()  
    {  
        Validator::extend('shainbangou', function($attr, $value, $param) {  
            return preg_match('/^[A|Z][0-9]{6}$/', $value);  
        });  
    }  
}

次にエラー文言の設定をします。
viewにて社員番号はempIdという変数名で設定されているとします。
【/resources/lang/ja/validation.php】

return [  
〜〜 省略 〜〜  
    'custom' => [  
        'empId' => [  
            'shainbangou' => '社員番号が間違っています。(A/Z + 数字6桁).',  
        ],  
    ],  
〜〜 省略 〜〜  
    'attributes' => [  
        'empId' => '社員番号',  
    ],  
];

これで、コントローラなどのバリデーション処理で新ルール「shainbangou」が使えるようになります。