Я пытаюсь получить ошибки проверки, чтобы появиться в 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()
.
Это должно сделать это.