2014-08-29 7 views
5

fehlgeschlagen Wenn es eine Möglichkeit, zu prüfen, ob oder nicht der Validator speziell wegen der unique Regel gescheitert?Laravel Validierung: prüfen, warum Validator

$rules = array(
      'email_address' => 'required|email|unique:users,email', 
      'postal_code' => 'required|alpha_num', 
     ); 

     $messages = array(
      'required' => 'The :attribute field is required', 
      'email' => 'The :attribute field is required', 
      'alpha_num' => 'The :attribute field must only be letters and numbers (no spaces)' 
     ); 

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

     if ($validator->fails()) { 

In laymans Begriffe möchte ich im Grunde wissen: „die Überprüfung nicht bestanden hat, weil die email_address nicht einzigartig war?“

+0

Vielleicht eine Eingabe bereitzustellen, die die anderen Validierungsregeln passiert? (Und die Fehlermeldungen überprüfen). –

+0

Aber Sie können genau sehen, was Eingänge Ich überprüfe für ... 'email_address' und' postal_code' – dcolumbus

Antwort

12

prüfen für eine bestimmte Regel innerhalb des zurückgegebenen Array gescheiterter Regeln

if ($validator->fails()) { 

    $failedRules = $validator->failed(); 

    if(isset($failedRules['email_address']['Unique'])) { 

    ... 
+0

In json konvertiert, scheint es '{" email_address ": {" Unique ": [" users "," email "]}}' – dcolumbus

+0

zu aktualisieren. Sie müssen es nach Feld abgleichen, wobei jedes Feld sein eigenes Array von Regeln hat. –

+0

Fast, aber immer wieder falsch, obwohl ich sehen kann, dass es wahr ist. – dcolumbus

1

Dies wird ein Fehler angezeigt und Ihnen sagen, was fehlgeschlagen:

-Controller

if($validation->fails()){ 

    return Redirect::back()->withErrors($validation)->withInput(); 
} 

foreach($errors->all() as $error) { 
    echo $error; 
} 

Und in Blade-Vorlage hinzufügen, um dieses:

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

Und das wird eine Meldung zurück mit was auch immer der Fehler ist. E-Mail stimmt nicht überein. Feld ist erforderlich. Blah blah

Sie auch, dass die E-Mail-Array aus dem $ message entfernen kann. Der Validator wird alles für Sie übernehmen. Sie möchten das nur verwenden, wenn Sie benutzerdefinierte Nachrichten möchten.

Sie können auch versuchen, diese Aussage var_dump:

var_dump ($ Validierungs-> Fehler()); sterben;

+0

Ja, aber ich muss wissen, was in meinem Controller ausgefallen, bevor der Ansicht zu bekommen. – dcolumbus

+0

Nun in Ihrem Controller können Sie das gleiche foreach verwenden und es wird in Ihrem Controller angezeigt. Ich bearbeitete meine Antwort so können Sie – Lynx

+0

$ errors- sehen> alle() erzeugen 'Rufen auf eine Elementfunktion all() auf einem nicht-object' – dcolumbus

Verwandte Themen