2016-05-02 21 views
0

私は単純なラベール検証をしようとしていますが、検証エラーメッセージを返すことができないのでちょっと止まります。Laravel redirect withErrors not working

コントローラー:

//for "GET" method 
public function courseAdminCreate() 
{ 
    return view('course/adminCreate'); 
} 

//for "POST" method 
public function doCourseAdminCreate() 
{ 
    $rules = array(
     'name' => 'required', 
     'contact_name' => 'required', 
     'contact_number' => 'required|numeric', 
     'account_number' => 'required|numeric', 
     'address' => 'required', 
     'latitude' => 'required', 
     'longitude' => 'required' 
    ); 

    $validator = Validator::make(Input::all(), $rules); 

    if ($validator->fails()) { 

     //get error message 
     $messages = $validator->messages(); 
     //die($messages); //if i using DIE command, error message appear 

     return redirect("course/admin/create")->withErrors($validator); 

    } else { 
     //Save to DB 
    } 
} 

のroutes.php:

//other code 

Route::get('course/admin/create', ['as' => 'courseAdminCreate', 'uses' => '[email protected]']); 
Route::post('course/admin/create', ['as' => 'doCourseAdminCreate', 'uses' => '[email protected]']); 

//other code 

再生回数:

@extends('layouts.app') 

@section('title') 
Course 
@stop 

@section('content') 
<div class="row"> 
    <div class="col-lg-12"> 
     <div class="panel panel-default"> 
      <div class="panel-heading"> 
       @yield('title') Add 
      </div> 
      <div class="panel-body"> 
       {!! Form::open(['url' => '/course/admin/create']) !!} 
       <div class="row"> 
        <div class="col-lg-12"> 

         <!--START PRINT ERROR MESSAGE --> 
         @if (count($errors) > 0) 
         <div class="alert alert-warning alert-dismissable"> 
          <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> 
          @foreach ($errors->all() as $error) 
           <li>{{ $error }}</li> 
          @endforeach 
         </div> 
         @endif 
         <!-- END PRINT ERROR MESSAGE --> 

        </div> 
        <div class="col-lg-6"> 
         <div class="form-group"> 
          <label>Course Name</label> 
          <input class="form-control" name="name" placeholder="name.." required> 
         </div> 
         <div class="form-group"> 
          <label>Contact Name</label> 
          <input class="form-control" name="contact_name" placeholder="contact.." required> 
         </div> 
         <div class="form-group"> 
          <label>Contact Number</label> 
          <input class="form-control" name="contact_number" placeholder="number.." required> 
         </div> 
         <div class="form-group"> 
          <label>Account Number</label> 
          <input class="form-control" name="account_number" placeholder="account.." required> 
         </div> 
        </div> 
        <div class="col-lg-6"> 
         <div class="form-group"> 
          <label>Address</label> 
          <textarea class="form-control" name="address" rows="5" placeholder="address.." required></textarea> 
         </div> 
         <div class="form-group"> 
          <label>latitude</label> 
          <input class="form-control" name="latitude" placeholder="latitude.." required> 
         </div> 
         <div class="form-group"> 
          <label>longitude</label> 
          <input class="form-control" name="longitude" placeholder="longitude.." required> 
         </div> 
        </div> 
        <!-- /.col-lg-12 --> 
        <div class="col-lg-12"> 
         <input type="submit" class="btn btn-default btn-success" value="Save"/> 
         <a href="{{ URL::to('course/admin') }}" class="btn btn-default btn-warning">Cancel</a> 
        </div> 
        <!-- /.col-lg-12 --> 
       </div> 
       <!-- /.row (nested) --> 
       {!! Form::close() !!} 
      </div> 
      <!-- /.panel-body --> 
     </div> 
     <!-- /.panel --> 
    </div> 
    <!-- /.col-lg-12 --> 
</div> 
<!-- /.row --> 
@stop 

検証がactuaです例えば、私が "contact_number"に数字の横にある他の文字を入力すると、それは私をコース/ admin/createにリダイレクトします。問題は私がメッセージを印刷できないことです。私がvar_dumpしようとすると、ビューの$エラーは空の配列としてカウントされます。

私の情報は十分ですが、どうもありがとうございます。

答えて

0

コントローラに問題がある可能性があります。ファサードメソッドValidator::makeではなく、コントローラメソッドで$this->validate()メソッドを使用することができます。手動で作成したバリデータ/ルールを使用していないので、makeメソッドの使用は意味がありません。

検証中にエラーが発生した場合、Laravelはユーザーが来ているページに自動的にリダイレクトします。したがって、カスタムリダイレクトロジックは必要ありません。

コントローラで試してみてください。完全なリクエストをdoCourseAdminCreateメソッドに挿入し、$this->validate()メソッドに渡すことができます。

//for "GET" method 
public function courseAdminCreate() 
{ 
    return view('course/adminCreate'); 
} 

//for "POST" method 
public function doCourseAdminCreate(Request $request) 
{ 
    $rules = array(
     'name' => 'required', 
     'contact_name' => 'required', 
     'contact_number' => 'required|numeric', 
     'account_number' => 'required|numeric', 
     'address' => 'required', 
     'latitude' => 'required', 
     'longitude' => 'required' 
    ); 

    $this->validate($request, $rules); 

    // Save to db 
} 

すべてのエラーメッセージはautommaticallyすでにあなたのテンプレートで使用されていることを、$error変数に格納されています。