2014-02-23 59 views
1

我正在使用Laravel的表單驗證功能並嘗試解決如何在視圖中循環顯示錶單錯誤。目前,我使用下面的代碼成功驗證表單:在視圖中循環驗證錯誤

public function create() 
{ 
    $validator = Validator::make(
     Input::all(), 
     array(
      'username' => 'required|alpha_num|unique:users', 
      'email' => 'email|unique:users', 
      'password' => 'required|min:6', 
      'passwordConf' => 'required|same:password' 
     ) 
    ); 

    if ($validator->fails()) 
    { 
     return Redirect::to('join')->withErrors($validator); 
    } 

    return View::make('user/join')->with(); 
} 

的驗證成功驗證表單,如果驗證失敗重定向到join路線。顯然,我也想向用戶顯示驗證消息。我有我所有的觀點擴展master.blade.php佈局文件,並在佈局我有以下代碼:

@if (Session::has('errors')) 
    <div class="alert alert-danger"> 
     @foreach (Session::get('errors') as $error) 
      Test<br /> 
     @endforeach 
    </div> 
@endif 

這似乎一半的工作。如果存在驗證錯誤,則警告div將顯示在頁面上,但不會輸出驗證錯誤。這表明Session::has('errors')返回true,但我顯然沒有正確迭代驗證錯誤。

如何迭代通過withErrors發送給視圖的驗證錯誤?

回答

7

有一個自動的$errors變量傳遞給你的視圖。您不必直接檢查會話。

@foreach ($errors->all() as $error) 
    {{ $error }}<br/> 
@endforeach 

下面是從the docs報價:

注意,我們不必錯誤消息明確地結合到我們的GET路線圖。這是因爲Laravel將始終檢查會話數據中的錯誤,並在它們可用時自動將它們綁定到視圖。 因此,需要注意的一點是,所有視圖中始終有一個$errors變量,每個請求都可以使用,因此您可以方便地假定變量總是被定義並且可以安全地使用。 $errors變量將是MessageBag的實例。

+0

是的,但甚至沒有「測試」顯示出來。如果我將其更改爲'{{$ error}}'我得到相同的結果,則警告div顯示,但不顯示任何錯誤消息。 –

+0

這是一個不充分的答案,因爲'$ errors'包含各種結構來區分不同類型的錯誤。 –