ハマログ

株式会社イーツー・インフォの社員ブログ

Laravelのカスタムバリデーション

Laravelの独自バリデーション実装について

※Laravel5.2で検証

Laravelには予め用意されているValidationルールがいくつかあり、基本的なウェブアプリケーションでは既存のルールでまかなえる場合が多いです。
Laravel – Validation – Available Validation Rules

用意されているバリデーションルールで対応できない場合、独自のバリデーションルールを作成します。

公式のドキュメントにはAppServiceProviderに記載する例がありますが、今回はValidatorServiceProviderに定義します。

Validatorの拡張
app/Providers/ValidatorServiceProvider.php

class ValidatorServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->app->validator->resolver(function($translator, $data, $rules, $messages, $attributes) {
            return new CustomValidator($translator, $data, $rules, $messages, $attributes);
        });

        // ↓これを追記
        Validator::extend('rule', function($attribute, $value, $parameters, $validator) {
            return true; // falseだとValidation失敗
        });
    }

ruleに指定した文字列をvalidator定義で指定することで呼び出せるようになります。

Validator::extend('custom_rule', function($attribute, $value, $parameters, $validator) {
});

$this->validate($request, [
    'currentpassword' => 'required|custom_rule',
]);

$attributeにはformの属性名(上記の例だとcurrentpassword)、$valueにはユーザからの入力値がはいります。

また、以下のようにパラメータを指定すると$parameters配列で受け取ることができます。

$this->validate($request, [
    'currentpassword' => 'required|custom_rule:100,200',
]);

Validator::extend('custom_rule', function($attribute, $value, $parameters, $validator) {
    dd($parameters);
});

array:2 [▼
  0 => "100"
  1 => "200"
]

では、入力されたパスワードとDBのパスワードが一致するかチェックしてみます。

ValidatorServiceProvider.php

Validator::extend('exist_password', function($attribute, $value, $parameters, $validator) {
    return Hash::check($value, Auth::user()->password);
});

Controller

$this->validate($request, [
    'currentpassword' => 'required|exist_password',
]);

20160605 143143

LaravelLaravel5laravel5.2PHPValidationエラー

  kaneko tomo   2016年6月5日


関連記事

『ヤバい!WordPress管理画面のID / Pass忘れた!』って時のはなし。

どうも! お久しぶりでございます。宇都宮です。 別の会社にいる幼馴染が社内ブログ…

wordpressの出力ログファイルの切り替え(またはローテーション)

wordpressのデバッグログ(wp-content/debug.log)は単…

laravel5をcomja5で日本語化

こんにちは。S.Iです。 梅雨があけましたね。暑い日が続きますね。 さて、この度…


← 前の投稿

次の投稿 →