[0011]カスタムバリデーションクラスを作成
■CustomValidator
この例のLalavelフレームワークのバージョンは5.5です。
appにServicesフォルダを作成し、app/Services にカスタムバリデーションクラス[CustomVaidator.php]を作成しようと思います。
まずはapp/Providersにある、AppServiceProviderを編集します。
AppServiceProvider.php
<?php
namespace App\Providers;
use Validator;
use Illuminate\Support\ServiceProvider;
use App\Services\CustomValidator;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::resolver(function($translator, $data, $rules, $messages)
{
return new CustomValidator($translator, $data, $rules, $messages);
});
}
public function register()
{
//
}
}
useを2つ追加しました。use Validator;とuse App\Services\CustomValidator;です。
boot関数内にValidator::resolver(function($translator, $data, $rules, $messages) { return new CustomValidator($translator, $data, $rules, $messages); });を追加しました。これで準備Okです!
次にapp/Services にカスタムバリデーションクラス[CustomVaidator.php]を作成します。
CustomVaidator.php
<?php
namespace App\Services;
class CustomValidator extends \Illuminate\Validation\Validator
{
public function validateHanNumber($attribute, $value)
{
return preg_match("/^[0-9]+$/", $value);
}
}
今回は半角数字のみOKなHanNumberを作成しました。オリジナルのバリデーションは[CustomVaidator.php]に関数を追加していきます。
次にそれぞれのバリデーションの中でやってもいいですが、共通的に利用できるよう/resources/lang/ja/validation.phpに追加します。
validation.php
<?php
return [
'han_number' => ':attribute : 半角数字で入力してください.',
'attributes' => [
'tel' => '電話番号',
],
];
必要箇所のみピックアップしています。さきほどHanNumberで作成したので、han_numberの追加をしています。
また、telは電話番号なのでattributesも追加しました。
最後にバリデーションで呼び出してみます。
$ruleArr['tel'] = 'required|max:11|han_number';
電話番号[tel]に半角数字以外を入力すると、「電話番号 : 半角数字で入力してください.」と出ました♪
Lalavelには元々豊富なバリデージョンがありますが、実際の利用では足りないこともあるのでカスタムバリデーションクラス利用しています!