2016-05-30 117 views
0

我想通過使用Laravel的驗證器來驗證一個簡單的窗體。看起來像驗證工作正常,但我無法顯示錯誤。窗體和控制器看起來像這樣。Laravel 5.2顯示驗證錯誤

形式

<h3>Add a New Team</h3> 

<form method="POST" action="/teams"> 

    <input type="hidden" name="_token" value="{{ csrf_token() }}"> 

    <div class="form-group"> 
     <input class="form-control" name="team_name" value="{{ old('team_name') }}" /> 
    </div> 

    <div class="form-group"> 
     <button type="submit" class="btn bg-primary">Add Team</button> 
    </div>  
</form> 

@if(count($errors)) 
    <div class="alert alert-danger"> 
     <ul> 
      @foreach($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 

控制器方法

public function store(Request $request) { 

    $this->validate($request, [ 

     'team_name' => 'required|min:10' 

    ]); 

    $team = new Team; 
    $team->team_name = $request->team_name; 
    $team->save(); 

    return back(); 
} 

如果我從我的路線刪除Web中間件組,錯誤顯示細膩。

目前我routes.php文件看起來像這樣

Route::group(['middleware' => ['web']], function() { 

    Route::get('/teams', '[email protected]'); 
    Route::post('/teams', '[email protected]'); 

}); 

如何解決這個問題?任何幫助,將不勝感激。

回答

0

寫下面的代碼在你的控制器:

// define rules 
    $rules = array(
    'team_name' => 'required|min:10' 
    ); 

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

if ($validator->fails()) 
{ 
    // something 
    return Redirect::back() 
      ->withErrors($validator) // send back all errors to the login form 
      ->withInput(); 
} 
else 
{ 
    // something 
    // save your data 
    $team = new Team; 
    $team->team_name = $request->team_name; 
    $team->save(); 
} 

變化查看文件:

@if (count($errors) > 0) 
    <div class="alert alert-danger"> 
     <ul> 
      @foreach ($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 
+0

試過了,什麼都沒有改變。 – Tartar

+0

我已編輯我的帖子,檢查它 –

1

我建議你使用Laravel Form Request 運行

artisan make:request TeamRequest 

添加一些邏輯和規則

class TeamRequest extends Request { 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; //you can put here any other variable or condition 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      // put your validation rules here 
     ]; 
    } 

} 

那麼你contorller代碼會像這樣:

public function store(TeamRequest $request) 
{ 

    $team = Team::create($request->all()); 

    return back(); 
} 

您不再需要驗證請求,並重定向回錯誤和其他的東西,laravel會爲你做它
你的代碼看起來更乾淨整潔,不是嗎?

0

經過一點研究,我發現Laravel 5.2有一個RouteServiceProvider,它包含所有路由的Web中間件組。所以我不需要手動將web中間件組添加到我的路由中。我剛從routes.php中刪除它,並解決了問題。

0

如果我從我的路線中刪除網絡中間件組,錯誤顯示正常。

在Laravel 5.2 web midddleware自動應用到您的航線routes.php因此無需再次申請web中間件。它在mapWebRoutes()方法RouteServiceProvider中定義。

1

爲什麼在使用laravel 5時使用驗證看起來像laravel 4!

在laravel 5,你首先需要做的是處理你的驗證

php artisan make:request RequestName 

你會發現請求類,你在

「應用程序/ HTTP /採購/ RequestName讓Request類。 PHP的」

,並在規則功能,您可以處理您的驗證

public function rules() 
    { 
     return [ 
      // put your validation rules here 
      'team_name' => 'required|min:10' 
     ]; 
    } 

終於在控制器

use App\Http\Requests\RequestName; 

public function store(RequestName $request) { 
    Team::create($request->all()); 
    return Redirect::back(); 
} 

更多說明here