Laravel 5.2 -> Валидация Ошибки не появляются

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

У меня есть UserController, настроенный так:

<?php namespace App\Http\Controllers; use App\User; use App\Http\Controllers\Controller; //Use Request; Use Flash; Use Illuminate\Http\Request; class UserController extends Controller { /** * Show the profile for the given user. * * @param int $id * @return Response */ public function showProfile($id) { return view('user.profile', ['user' => User::findOrFail($id)]); } public function store(Request $request) { $this->validate($request, [ 'email' => 'required|unique:users|email|max:255', ]); if($this) { $input = Request::all(); User::create($input); return redirect('/'); } else { return redirect('/')->withErrors($validator); } } } 

На мой взгляд (layout.blade.php), я включил:

 @if (count($errors) > 0) @foreach ($errors->all() as $error) {{!! $errors !!}} @endforeach @endif 

Для учета маршрута у меня есть:

 Route::group(['middleware' => ['web']], function () { Route::get('/', function (){ return view('home'); }); }); 

К сожалению, когда я ввожу «плохие» данные, которые не должны проверяться, я не вижу никаких ошибок (но он не хранится в db, так что это так).

Еще одна заметка: когда шаблон клинка отображается, я вижу дополнительную скобку «}», и я не уверен, почему это так.

Спасибо за любую помощь.

Есть пара неправильных или что можно улучшить здесь. Метод store на UserController имеет множество странных проблем. $this всегда будет верно, потому что объекты истинны в php. Кроме того, вы передаете $validator withErrors в withErrors что не имеет смысла, потому что нет validator переменных.

 public function store(Request $request) { $this->validate($request, [ 'email' => 'required|unique:users|email|max:255', ]); User::create(Request::all()); return redirect('/'); } 

Метод validate Illuminate\Foundation\Validation\ValidationException будет вызывать Illuminate\Foundation\Validation\ValidationException если есть ошибка проверки. Это исключение должно быть указано в переменной экземпляра $dontReport в App\Exceptions\Handler как показано ниже:

 protected $dontReport = [ AuthorizationException::class, HttpException::class, ModelNotFoundException::class, ValidationException::class, ]; 

Если вы изменили эти значения, удалили или изменили признак ValidatesRequest , возможно, вы нарушили эту функциональность.

Ваш код сообщения об ошибках также неверен:

 @foreach ($errors->all() as $error) {!! $errors->first() !!} @endforeach 

Здесь есть 3 изменения. Сначала я удалил проверку размера внешних ошибок, это действительно ничего не значит. Затем я исправил вашу дополнительную ошибку, синтаксис для неэкранирующих данных {!! $errors->first() !!} {!! $errors->first() !!} . Наконец, я вызвал ->first() это возвращает первую ошибку, связанную с этим конкретным полем.

Я думаю, что важно отметить, что исключение проверки приведет к перенаправлению на предыдущую страницу. Логику определения предыдущей страницы можно найти в Illuminate\Routing\UrlGenerator::previous() .

В версии larvel 5.2.41 сеть промежуточного программного обеспечения выбрасывается.

Средство добавления маршрутов внутри Route::group(['middleware' => ['web']], function () { сделает проверку недействительной.

Блок ошибок должен быть:

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

Предполагая, что вы используете Bootstrap для предупреждений.

У вас также нет $validator . Вам нужно сделать что-то вроде этого:

 $validator = Validator::make($request->all(), [ 'email' => 'required|unique:users|email|max:255', ]); 

Вместо $this->validate() .

Это должно сделать это.