2014-08-29 14 views
5

Jeśli istnieje sposób sprawdzenia, czy walidator zawiódł z powodu reguły unique?Sprawdzanie poprawności Laravel: sprawdź, dlaczego weryfikator się nie powiódł

$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()) { 

W terminach laymans, zasadniczo chcę wiedzieć: "czy sprawdzanie poprawności nie powiodło się, ponieważ adres e-mail nie był unikatowy?"

+0

Może stanowić wkład przechodzący inne reguły sprawdzania poprawności? (I sprawdzanie komunikatów o błędach). –

+0

Ale możesz zobaczyć dokładnie, jakie wejścia sprawdzam dla ... 'adres_adresu e-mail' i' kod_pod pocztowy' – dcolumbus

Odpowiedz

12

Sprawdź konkretnej reguły w zwróconej tablicy nieudanych zasad

if ($validator->fails()) { 

    $failedRules = $validator->failed(); 

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

    ... 
+0

Konwertowany na json, wydaje się zwracać '{" adres_adresu e-mail ": {" Unikalny ": [" użytkownicy "," e-mail "]}} zaktualizowano" – dcolumbus

+0

. Musisz sprawdzić to pole, każde pole ma własną tablicę reguł. –

+0

Prawie, ale wciąż powraca fałszywie, chociaż widzę, że to prawda. – dcolumbus

1

Spowoduje to wyświetlenie błędu i powiedzieć, co nie powiodło się:

Controller

if($validation->fails()){ 

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

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

A w szablonie ostrza dodać:

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

I że wróci wiadomość z jakimkolwiek błędem. Email nie pasuje. To pole jest wymagane. Bla bla bla

Możesz również usunąć tę tablicę wiadomości e-mail z wiadomości $. Walidator poradzi sobie z tym wszystkim. Chcesz go użyć tylko wtedy, gdy chcesz otrzymywać niestandardowe wiadomości.

Można także spróbować var_dump to stwierdzenie:

var_dump ($ Potwierdzanie> Błędy()); umierać;

+0

Tak, ale muszę wiedzieć, co się nie powiodło w moim kontrolerze, zanim dostanę się do widoku. – dcolumbus

+0

Cóż w kontrolerze możesz użyć tego samego foreach i wyświetli się on w twoim kontrolerze. Edytowałem swoją odpowiedź, abyś mógł zobaczyć – Lynx

+0

$ errors-> all() produkuje 'Call to member function all() na non-object' – dcolumbus

Powiązane problemy