2016-02-14 21 views
8

To jest dziwne. Przez cały dzień szukałem rozwiązania dla mojego problemu, a większość rozwiązań nie działa dla mnie z powodu różnych wersji lub innej obsługi żądania kontrolera.Laravel 5.2 nie pokazuje błędów sprawdzania poprawności formularza

Co się dzieje?

mam postać:

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

oraz wniosku:

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

Wyjeżdżam pole nazwy puste więc nie walidacji i powinien wrócić do strony formularza kontaktowego i Pokaż błędy:

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

Nic nie pokazuje! Gdybym vardump zmienną $errors, otrzymuję to:

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

Gdybym wypełnić pole formularza prawidłowo powodzeniem wysyła mnie do strony sukces i wszystko działa idealnie. Teraz potrzebuję tylko tego, aby ten błąd zadziałał prawidłowo: S

Z góry dziękuję!

+0

Czy Twoje kontrolery ograniczony do części trasy z group__ __web middleware? Jeśli nie, spróbuj je związać, ale nie widzę w twoim kodzie nic złego ... – Hammerbot

+0

Zakładam, że twoja metoda kontrolera zawiera ContactFormRequest na liście parametrów? Czy przekierowujesz z powrotem do formularza samodzielnie lub czy polegasz na domyślnej akcji weryfikatora? –

+0

Tak. Wszystkie moje trasy są pogrupowane w "sieć" oprogramowania pośredniego. I moja metoda kontrolera w swoim parametrze ma ContactFormRequest jako typ! –

Odpowiedz

3

To jest problem z aktualizacją 5.2. Co się dzieje, to oprogramowanie pośrednie, które odpowiada za to, że zmienna błędów dostępna dla wszystkich widoków nie jest wykorzystywana, ponieważ została przeniesiona z globalnego oprogramowania pośredniego do grupy oprogramowania pośredniego sieci.

Istnieją dwa sposoby, aby rozwiązać ten problem:

1-W pliku kernel.php, można przenieść się z powrotem do warstwy pośredniej \Illuminate\View\Middleware\ShareErrorsFromSession::class nieruchomości protected$middleware.

2-Możesz owijać wszystkie swoje trasy internetowe grupą tras i stosować do nich oprogramowanie pośredniczące.

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

Zobacz ten
laravel-5-2-errors-not-appearing-in-blade

+0

Dziękuję panu za odpowiedź. Widziałem tę odpowiedź w tym poście, ale wszystkie moje trasy są wewnątrz grupy WEB Middleware! Wciąż nie działa. –

+0

Twoje webdelware jest puste i nie wyświetla się błąd ???? – paranoid

+0

OK Znalazłem problem. To było naprawdę bardzo głupie. Trasa POST znajdowała się poza internetową grupą oprogramowania pośredniego –