2014-08-29 11 views
5

Se esiste un modo per verificare se il validatore ha fallito in modo specifico a causa della regola unique?Convalida di Laravel: verifica perché il validatore ha avuto esito negativo

$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 parole povere, Io fondamentalmente voglio sapere: "ha fatto la convalida non riuscire perché l'EMAIL_ADDRESS non è stato unico?"

+0

Forse fornire un input che passa le altre regole di convalida? (E controllando i messaggi di errore). –

+0

Ma puoi vedere esattamente quali input sto verificando ... 'email_address' e' postal_code' – dcolumbus

risposta

12

Verificare la presenza di una regola specifica all'interno della matrice restituita delle regole falliti

if ($validator->fails()) { 

    $failedRules = $validator->failed(); 

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

    ... 
+0

Convertito in json, sembra restituire '{" indirizzo_email ": {" Unico ": [" utenti "," email "]}}' – dcolumbus

+0

aggiornato. Devi controllarlo per campo, ogni campo ha una propria serie di regole. –

+0

Quasi, ma restituisce sempre sempre false, anche se posso vedere che è vero. – dcolumbus

1

Questo visualizzerà un errore e ti dirà cosa non riuscita:

controller

if($validation->fails()){ 

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

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

E nel vostro template lama aggiungere questo:

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

E che restituirà un messaggio con qualunque sia l'errore. L'email non corrisponde. Il campo è obbligatiorio. Blah blah

È inoltre possibile rimuovere tale matrice di posta elettronica dal messaggio $. Il validatore gestirà tutto ciò che per te. Lo vuoi usare solo se vuoi messaggi personalizzati.

Potete anche provare a var_dump questa dichiarazione:

var_dump ($ validation-> errori()); morire;

+0

Sì, ma ho bisogno di sapere cosa non funziona nel mio controller, prima di arrivare alla vista. – dcolumbus

+0

Bene nel controller è possibile utilizzare lo stesso foreach e verrà visualizzato nel controller. Ho modificato la mia risposta in modo da poter vedere – Lynx

+0

$ errors-> all() produce 'Chiama a una funzione membro all() su un non-oggetto' – dcolumbus

Problemi correlati