2016-02-14 6 views
8

Das ist komisch. Ich habe den ganzen Tag gegoogelt und versucht, eine Lösung für mein Problem zu finden, und die meisten Lösungen funktionieren nicht für mich aufgrund unterschiedlicher Versionen oder unterschiedlicher Anforderungen - Controller-Handhabung.Laravel 5.2 zeigt keine Formularvalidierungsfehler an

Was passiert ist das.

Ich habe ein Formular:

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

und eine Anfrage:

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', 
     ]; 
    } 
} 

Ich verlasse das Namensfeld leer, so es die Validierung fehlschlägt, und es sollte zur Kontaktformular Seite zurückzukehren und Fehler anzeigen:

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

Es zeigt nichts! Wenn ich die $errors Variable vardump, bekomme ich diese:

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

Wenn ich das Formularfeld ausfüllen richtig schickt mir es erfolgreich zum Erfolg Seite und alles funktioniert perfekt. Alles, was ich jetzt brauche, ist, dass diese Fehlersache richtig funktioniert: S

Vielen Dank im Voraus!

+0

begrenzt Ihre Controller sind der __web Middleware group__ auf eine Strecke Teil? Wenn nicht, versuchen Sie, sie zu binden, aber ich kann nichts in Ihrem Code falsch sehen ... – Hammerbot

+0

Ich gehe davon aus, dass die Methode Ihres Controllers ContactFormRequest in der Parameterliste enthält? Leiten Sie das Formular selbst zurück oder verlassen Sie sich auf die Standardaktion des Validators? –

+0

Ja. Alle meine Routen sind mit dem Middleware-Web gruppiert. Und meine Controller-Methode in ihrem Parameter hat ContactFormRequest als Typ! –

Antwort

3

Dies ist ein Breaking-Problem mit dem 5.2 Upgrade. Was passiert, ist die Middleware, die dafür verantwortlich ist, dass die Fehlervariable für alle Ihre Ansichten verfügbar gemacht wird, weil sie von der globalen Middleware zur Web-Middleware-Gruppe verschoben wurde.

Es gibt zwei Möglichkeiten, dieses Problem zu beheben:

1-In Ihrer kernel.php-Datei können Sie die Middleware \Illuminate\View\Middleware\ShareErrorsFromSession::class zurück zur protected$middleware Eigenschaft bewegen.

2 - Sie können alle Ihre Webrouten mit einer Routengruppe versehen und die Web-Middleware auf sie anwenden.

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

Sehen Sie diese
laravel-5-2-errors-not-appearing-in-blade

+0

Vielen Dank Sir für Ihre Antwort. Ich habe diese Antwort in diesem Beitrag gesehen, aber alle meine Routen sind in der WEB Middleware-Gruppe! Funktioniert immer noch nicht. –

+0

Ihre Web Middelware ist leer und Fehler nicht angezeigt ???? – paranoid

+0

Ok, ich habe das Problem gefunden. Es war wirklich sehr dumm. Die POST-Route befand sich außerhalb der Web-Middlewaregruppe. –