2013-01-21 16 views
6

Ich habe einen Controller mit einigen Validierung eingerichtet.Zugriff auf Validierungsfehler in Sicht

public function attemptLogin() 
{ 
    $rules = array(
     'email'=>'required|email', 
     'password'=>'required' 
    ); 


    $validator = Validator::make(Input::all() , $rules); 
    if($validator->fails()){ 
     return Redirect::to('login')->withErrors($validator); 
    }; 
} 

Wenn ich geben die Nachrichten direkt im Controller

$messages = $validator->messages(); 
print_R($messages->all()); 

ich die Validierungsfehler bekommen - aber wenn ich umleiten:

return Redirect::to('login')->withErrors($validator); 

Die $errors Array in der Ansicht verfügbar ist immer kommt leer.

+0

Laravel 4 ist immer noch in BETA - so rate ich dir rüber zu www.Laravel.io – diagonalbatman

Antwort

8

Von laravel four documentation

Beachten Sie, dass, wenn die Validierung fehlschlägt, wir übergeben die Validator-Instanz an die Redirect mit der withErrors Methode. Diese Methode blinkt die Fehler Nachrichten an die Sitzung, so dass sie auf der nächsten Anfrage verfügbar sind.

Variable $errors es ist kein Array.

$errors Die Variable wird eine Instanz von MessageBag sein.

Aus irgendeinem Grund mag ich @seamlss Idee nicht wirklich. Sie können stattdessen verwenden.

@if(Session::has('errors')) 
<? $errors = Session::get('errors'); ?> 
<div class="alert alert-error"> 
    <button type="button" class="close" data-dismiss="alert">&times;</button> 
    <ul> 
     <li id="form-errors" > 
      <h3> {{ $errors->first('email') }}</h3> 
     </li> 
    </ul> 
</div> 
@endif 

ich einige bootstrap Komponenten verwendet haben, nicht verwirrt, du bist die einzige, was Sie brauchen ist die Linien mit den geschweiften Klammern und der magischen @ -Zeichen.

Von laravel docs error-messages-and-views

So ist es wichtig, dass ein $ errors Variable zu beachten, wird immer in allen Ihren Ansichten verfügbar sein, bei jeder Anfrage, so dass Sie bequem die $ errors Variable annehmen ist immer definiert und kann sicher verwendet werden.

können Sie auch this überprüfen

@if($errors->has('email')) 
    <div class="control-group error"> 
     <label class="control-label" for="email">Email</label> 
     <div class="controls"> 
      <input type="text" id="email" placeholder="Email" name="email"> 
      <span class="help-inline">{{ $errors->first('email') }}</span> 
     </div> 
    </div> 
@endif 
+0

@ FMaz008 Warum vermutest du, dass das nicht "Blade" -Syntax ist? –

0

Haben Sie versucht:

return Redirect::to('login')->withErrors($validator); 

oder

return Redirect::to('login')->withErrors($validator->messages()); 
+0

Ich habe das versucht - es scheint nicht zu helfen. – PokeItWithAStick

-1

Versuchen Sie, die folgenden

return Redirect::to('login')->with('errors',$validator->errors->all()); 

dann aus Ihrer Sicht Schleife durch diese Fehler

foreach($errors as $error) { 
    print $error; 
} 
5

Ich hatte Erfolg haben Umleiten ->withErrors($validation)

und anschließend in der Ansicht überprüft den Zustand @if($errors->count() > 0) ...

@if($errors->count() > 0) 
    <p>The following errors have occurred:</p> 

    <ul id="form-errors"> 
     {{ $errors->first('username', '<li>:message</li>') }} 
     {{ $errors->first('password', '<li>:message</li>') }} 
     {{ $errors->first('password_confirmation', '<li>:message</li>') }} 
    </ul> 
@endif 
0

Hier ist eine andere Möglichkeit ist, wenn Sie Schwierigkeiten zeigt Fehler haben, und wenn sie richtig über ->withErrors() weitergegeben. Wenn Sie zu einer Controller-Aktion umleiten, die eine eigene Statusüberprüfung durchführen muss und selbst ->withErrors() aufruft, wird die zuerst injizierte Adresse $errors angezeigt.

Verwandte Themen