2016-02-14 69 views
8

這很奇怪。由於版本不同或請求控制器處理不同,我一直在使用Google一直在努力爲我的問題尋找解決方案,並且大多數解決方案對我無效。Laravel 5.2未顯示錶單驗證錯誤

這是怎麼回事。

我有一個表格:

<div class="form-group"> 
    Name * 
    {!! Form::text('name', '', ['class'=>'form-control', 'placeholder'=>'Required field']) !!} 
</div> 

和請求:

class ContactFormRequest extends Request 
{ 

    public function authorize() 
    { 
     return true; 
    } 


    public function rules() 
    { 
     return [ 
      'name' => 'required|max:64', 
      'email' => 'required|email|max:128', 
      'message' => 'required|max:1024', 
     ]; 
    } 
} 

我要離開name字段爲空,以便驗證失敗,應該返回到聯繫人表單頁面和顯示錯誤:

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

它什麼也沒有顯示!如果我vardump$errors變量,我得到這個:

object(Illuminate\Support\ViewErrorBag)[161] 
    protected 'bags' => 
    array (size=0) 
     empty 

如果我填寫表單域正確它成功地將我的成功頁面,一切都運行完美。我現在需要的是使這個錯誤的東西正常工作:S

謝謝你提前!

+0

是你的控制器界,__web中間件group__的路線一部分?如果沒有,請嘗試綁定它們,但我在代碼中看不到任何錯誤... – Hammerbot

+0

我假設您的控制器的方法在參數列表中包含ContactFormRequest?你自己重定向到表單還是依賴驗證器的默認操作? –

+0

是的。我所有的路線都與中間件的「網絡」分組在一起。我的控制器方法在它的參數中有ContactFormRequest類型! –

回答

3

這是5.2升級的突破性問題。發生什麼事的是中間件,它負責讓所有視圖可用的錯誤變量沒有被利用,因爲它從全局中間件轉移到了網絡中間件組。

有兩種方法來解決這個問題:

1,在你的kernel.php文件,你可以移動中間件\Illuminate\View\Middleware\ShareErrorsFromSession::classprotected$middleware財產。

2 - 您可以用路由組包裹所有的網絡路由並將網絡中間件應用到它們。

Route::group(['middleware' => 'web'], function() { 
    // Place all your web routes here... 
}); 

看到這個
laravel-5-2-errors-not-appearing-in-blade

+0

謝謝您的答覆。我在那篇文章中看到了這個答案,但是我的所有路由都在WEB中間件組中!還是行不通。 –

+0

你的網頁middelware是空的,錯誤不顯示???? – paranoid

+0

好吧,我發現了這個問題。這實際上很愚蠢。 POST路由超出了Web中間件組 –