###前提・実現したいこと
Laraveのカスタムバリデーションを実装したい。
###ソースコード
◆大まかな流れ
0. Illuminate\Validation\Validatorを継承したクラスでルールを定義
0. サービスプロバイダを定義
0. サービスプロバイダを登録
0. カスタムバリデーションを使う
◆Illuminate\Validation\Validatorを継承したクラスでルールを定義
※確認のため、強制的にバリデートエラーとなるようにfalseを返しています。
PHP
1// 2<?php 3namespace App\Services; 4 5class CustomValidator extends \Illuminate\Validation\Validator 6{ 7 public function validateFoo($attribute,$value,$parameters) 8 { 9 return false; 10 } 11}
◆サービスプロバイダを定義
ServiceProviderのひな形を下記コマンドで作成。
artisan make:provider
PHP
1<?php 2 3namespace App\Providers; 4 5use Illuminate\Support\ServiceProvider; 6use App\Services\CustomValidator; 7 8class ValidatorServiceProvider extends ServiceProvider 9{ 10 /** 11 * Bootstrap the application services. 12 * 13 * @return void 14 */ 15 public function boot() 16 { 17 18 \Validator::resolver(function($translator, $data, $rules, $messages) { 19 return new CustomValidator($translator, $data, $rules, $messages); 20 }); 21 22 } 23 24 /** 25 * Register the application services. 26 * 27 * @return void 28 */ 29 public function register() 30 { 31 // 32 } 33}
◆サービスプロバイダを登録
config/app.php の'providers' 配列にプロバイダを登録
PHP
1 'App\Providers\ValidatorServiceProvider',
◆カスタムバリデーションを使う
PHP
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Http\Requests; 7use App\Http\Controllers\Controller; 8 9class TestController extends Controller 10{ 11 public function index() 12 { 13 return view('valtest'); 14 } 15 16 public function store(Request $request) 17 { 18 $rules = [ 19 'text1' => 'required', 20 'text2' => 'foo', 21 ]; 22 $messages = [ 23 'text2.foo'=>'text2がエラーです', 24 ]; 25 26 // バリデーション実行 27 $this->validate($request,$rules,$messages); 28 29 return view('valtest'); 30 } 31}
◆view
text1とtext2のリクエストフォームを実装し、
エラーメッセージが表示されるよう
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
を@include しています。
###発生している問題
カスタムバリデーションから期待するエラーメッセージがviewに表示されない。
フォームのtext1、text2を未入力でsummitボタンを押下すると、
text1のバリデーション('required')のみエラーと判断されて
画面上に「text1は必ず指定してください。」と表示されますが、
カスタムバリデーションをルールに指定したtext2がエラーと判断されていないようです。
どこから間違っているのかも分からず・・・
どなたか、お力添え頂ければ幸いです。
###補足情報(言語/FW/ツール等のバージョンなど)
・XAMPP
・Laravel 5.2.7
・PHP 7.0.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/04 14:50