2016-06-22 4 views
4

У меня есть новый сайт, на котором работает Laravel 5.2 (Laravel Framework version 5.2.39). ПРИМЕЧАНИЕ: файл маршрутов НЕ использует группу промежуточного программного обеспечения, которая больше не нужна и может вызвать эту проблему.Laravel 5.2 ошибки проверки - ошибка сумка пустая

У меня есть простая проверка на ContactController «s store метода:

$this->validate($request, [ 
     'ContactFirst' => 'required|max:25', 
     'ContactLast' => 'required|max:25', 
     'ContactRole' => 'required|max:25', 
     'ContactEmail' => 'email|max:255', 
     'ContactPhone' => 'max:255', 
    ]); 

Когда я намеренно провалить проверку, сайт перенаправляет обратно в форму, но мешок ошибок не пуст, так нет ошибки информация предоставляется.

В представлении формы (resources/contacts/new.blade.php) Я поставил следующий код из документации, а также дамп:

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

страницы (как я сказал) перенаправляет обратно в форму и входы заполняются. Но $errors пуст и сообщения не печатаются:

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

Уверены, что вы не используете промежуточное программное обеспечение 'web' (я думаю, это именно то, что вы имели в виду в начале вашего вопроса). – TiagoRL

+0

@ TiagoRL-- да, промежуточное ПО 'web' не применяется в' routes.php' – user101289

ответ

3

Это похоже на ошибку при запуске нескольких версий аналогичного сайта на Homestead. Исправлена ​​ошибка.

3

На самом деле я не знаю, если Ваш код можно, потому что это не точный код, который показывает, что он вернется с ошибками.

Я использую подтверждение проверки с $validator->fails().

Проверить этот пример:

$validator = Validator::make($request->all(), [ 
    'ContactFirst' => 'required|max:25', 
    'ContactLast' => 'required|max:25', 
    'ContactRole' => 'required|max:25', 
    'ContactEmail' => 'email|max:255', 
    'ContactPhone' => 'max:255', 
]); 

if ($validator->fails()) { 
    return redirect()->back()->withErrors($validator)->withInput(); 
} 




Но я рекомендую вам создать ContactFormRequest класс, который расширяет Request класс и положить его в магазине аргумент (скриншот: http://joxi.ru/eAO55BF4glwRmo):

<?php namespace App\Http\Requests; 

class ContactFormRequest extends Request { 

    public function rules() { 
     return [ 
      'ContactFirst' => 'required|max:25', 
      'ContactLast' => 'required|max:25', 
      'ContactRole' => 'required|max:25', 
      'ContactEmail' => 'email|max:255', 
      'ContactPhone' => 'max:255', 
     ]; 
    } 
} 

, а затем в ваших контроллерах store способ:

public function store(ContactFormRequest $request) { 
    // here write code as if validation is valid 
} 

если после этой манипуляции Вы все еще не можете получить ошибки так выразиться:

<?php var_dump(get_defined_vars()) ?> 

перед тем {{var_dump($errors)}}

+0

@ num8er-- Я думаю, что это старый способ. Я использую новый синтаксис, описанный здесь: https://laravel.com/docs/master/validation#quick-writing-the-validation-logic – user101289

+0

@ user101289 Старый способ более классический и предсказуемый. Но если мы будем настаивать на новом пути, поэтому я напишу собственный класс запроса, и он будет очень гибким в использовании, потому что правила проверки не уничтожают основную логику действия контроллера, он сохраняет код действия чистым. – num8er

+0

@ num8er-- Я согласен с тобой ... Я просто пытаюсь использовать документированный формат и не знаю, почему он не работает, как и должно быть – user101289

0

Я использую ту же версию. Вот что я использую, чтобы показывать ошибки.

@if($errors->any()) 
<ul class="alert alert-danger"> 
@foreach($errors->all() as $error) 
<li>{{$error}}</li> 
@endforeach 
</ul> 
@endif 
Смежные вопросы