2016-02-14 2 views
8

Это странно. Я изо всех сил пытался найти решение для своей проблемы, и большинство решений не работают для меня из-за разных версий или различной обработки запросов-контроллеров.Laravel 5.2 не показаны ошибки проверки формы

Что происходит.

У меня есть форма:

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

и запрос:

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

Я оставив поле имени пустым, так что не проходит проверку, и он должен вернуться на страницу контактной формы и показать ошибки:

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

Это ничего не показывает! Если я vardump переменную $errors, я получаю это:

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

Если я заполнить поля формы должным образом, она успешно посылает мне на страницу успеха, и все отлично работает. Все, что мне нужно сейчас, - это правильно обработать эту ошибку: S

Спасибо заранее!

+0

Ваши контроллеры ограничены к маршрутной части __web промежуточного group__? Если нет, попробуйте связать их, но я не вижу ничего плохого в вашем коде ... – Hammerbot

+0

Я предполагаю, что ваш метод контроллера включает ContactFormRequest в список параметров? Вы перенаправляетесь обратно в форму самостоятельно или полагаетесь на действие валидатора по умолчанию? –

+0

Да. Все мои маршруты сгруппированы с веб-сайтом Middleware. И мой метод контроллера по своему параметру имеет ContactFormRequest как тип! –

ответ

3

Это проблема с обновлением 5.2. То, что происходит, - это промежуточное программное обеспечение, которое отвечает за то, чтобы переменная ошибок, доступная ко всем вашим представлениям, не использовалась, поскольку она была перенесена из глобального промежуточного программного обеспечения в группу промежуточного программного обеспечения.

Есть два способа исправить это:

1-В файле kernel.php, вы можете перемещать промежуточный \Illuminate\View\Middleware\ShareErrorsFromSession::class к свойству protected$middleware.

2-Вы можете объединить все свои веб-маршруты с группой маршрутов и применить к ним веб-промежуточное программное обеспечение.

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

Смотреть это
laravel-5-2-errors-not-appearing-in-blade

+0

Спасибо, сэр за ваш ответ. Я видел этот ответ на этом посту, но все мои маршруты находятся в группе WEB Middleware! Все еще не работает. –

+0

Ваша веб-среда бесплатна и ошибка не отображается ???? – paranoid

+0

Хорошо, я нашел проблему. Это было действительно очень глупо. Маршрут POST находился за пределами группы промежуточного программного обеспечения сети –

Смежные вопросы