ほい。
Laravelで独自バリデーションの実装は調べると結構出るが、独自バリデーションのパラメータをメッセージに埋め込む方法がいまいちわからなかったので備忘録のアレ
まずアレでバリデーションのサービスプロバイダーを作る。名前とかは何でもおk
php artisan make:provider ValidatorServiceProvider
validate* としたら独自バリデーションを定義できるのは調べたらすぐ出る
replace* としたら独自バリデーションのメッセージの置換を実装できる ← これのやり方を調べてもいまいちでなかった
app/Validator
配下に CustomValidationクラスを作成
<?php
namespace App\Validator;
class CustomValidation extends \Illuminate\Validation\Validator
{
// 数値化指定した指定した日付フォーマットのみ許可
public function validateIntegerOrDateFormat($attribute, $value, $parameters)
{
if (is_numeric($value)) {
return true;
}
if (false !== \DateTime::createFromFormat($parameters[0], $value)) {
return true;
}
return false;
}
// メッセージの:formatという文言を置換してリターン
protected function replaceIntegerOrDateFormat($message, $attribute, $rule, $parameters)
{
return str_replace(':format', $parameters[0], $message);
}
}
ほんでプロバイダに登録
<?php
namespace App\Providers;
use App\Validator\CustomValidation;
use Illuminate\Support\ServiceProvider;
class ValidatorServiceProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
\Validator::resolver(function ($translator, $data, $rules, $messages) { // (1)
return new CustomValidation($translator, $data, $rules, $messages);
});
}
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
}
メッセージ定義
src/resources/lang/ja/validation.php
return [
// 前略
'integer_or_date_format' => 'フォーマットが不正です。数値、または":format"の形式で入力してください',
];
指定方法
$validator = Validator::make($params, [
'input_hoge' => 'integer_or_date_format:Y-m-d'
]);
これで
フォーマットが不正です。数値、または":format"の形式で入力してください
これが
フォーマットが不正です。数値、または"Y-m-d"の形式で入力してください
になる
やったぜ。