最近、Laravel 5.1でカスタムバリデーションを作りました。その時、以下の資料を参考にしました。
資料はリンク切れになっていたので、その時とったメモを貼ります。
Laravel 5 の Custom Validation
irihit.hateblo.jp
公式の Documentation だとイマイチどこに何書けばいいのか分からんかったのでメモ。
カスタムバリデータ作成
オリジナルのバリデーションを定義するクラスを作成します。
今回は app ディレクトリ配下に Validator ディレクトリを作成して、その中に CustomValidator.php を設置しました。
<?php namespace App\Validator;
use Illuminate\Validation\Validator;
class CustomValidator extends Validator {
/**
* 日付の最大値をチェック
*
* @param $attribute
* @param $value
* @param $parameters
* @return bool
*/
public function validateDateTo($attribute, $value, $parameters)
{
return (new \DateTime($value)) <= (new \DateTime($parameters[0]));
}
protected function replaceDateTo($message, $attribute, $rule, $parameters)
{
return str_replace(':date', $parameters[0], $message);
}
}
validateDateTo 関数は、入力された日付が指定された日付以前かどうかを判定するための関数です。
replaceDateTo 関数は、上記チェックで異常と判定された時に、定義したエラーメッセージの文字列を置換するための関数です。
エラーメッセージの定義は後述します。
尚、カスタムバリデータクラスは必ず Illuminate\Validation\Validator を継承して下さい。
validate で始まる関数が、バリデータの名称となります。
例えば上記のコードでは、下記のようにバリデータを指定することが出来ます。
<?php namespace App\Http\Requests;
class SampleRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'date' => [
'dateTo:2014-12-31 23:59:59',
],
];
}
}
replace で始まる関数は、対応する validate で始まる関数の戻り値が false の時に呼び出されます。
例えば validateSample という関数で false が返されたら、replaceSample という関数が呼び出されて、エラーメッセージの置換処理を行います。
未定義の場合は、標準の置換処理のみを行います。
サービスプロバイダ作成
CustomValidator クラスを読み込むように、Validator 用のサービスプロバイダを作成します。
ServiceProvider が何たるかは検索検索ぅ。
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ValidatorServiceProvider extends ServiceProvider
{
/**
* @return void
*/
public function boot()
{
\Validator::resolver(function($translator, $data, $rules, $messages) {
return new CustomValidator($translator, $data, $rules, $messages);
});
}
/**
* @return void
*/
public function register()
{
//
}
}
作成したサービスプロバイダを読み込むように、config/app.php の providers に追記します。
'providers' => [
// ...
'App\Providers\ValidatorServiceProvider',
]
エラーメッセージの定義
エラーメッセージの定義方法はいくつかありますが、ここでは lang を利用した例を記載します。
lang/ja/validation.php の custom に、今回追加したバリデーションに対応するエラーメッセージを追記します。
* ロケーションは適宜読み替えて下さい。
'custom' => [
'date' => [
'date_to' => ':attribute は、:date 以前を指定して下さい。',
],
],
前述の例にあわせたエラーメッセージを定義しています。
date というパラメータに対して行った date_to のバリデーションのエラーメッセージを記載しています。
前述のとおり、エラーメッセージは replace 関数によって置換されます。
また、validate 関数はキャメルケースで記載しますが、エラーメッセージの定義はスネークケースで記載します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/05 00:27