Ошибка проверки в Laravel - массив ошибок не заполняется после ошибки проверки
Я столкнулся со странной проблемой, связанной с проверками в Laravel 5.2. Я рассмотрел следующие вопросы по Stackru, но ни один из них не подходит для моего случая:
Проверка Laravel не показывает ошибки
Laravel Validation не возвращает ошибку
Дело в том, что я пытаюсь подтвердить title
поле, прежде чем сохранить Card
объект в базу данных. Когда я отправляю форму с пустым title
Поле, как и ожидалось, не проходит валидацию. Тем не менее $errors
массив не заполняется при сбое упомянутых проверок. Кто-нибудь может объяснить, где я не так с этим кодом?
/////////////////////// CONTROLLER /////////////////////
public function create(Request $request)
{
$this->validate($request, [
'title' => 'required|min:10'
]);
Card::create($request->all());
return back();
}
///////////////////////// VIEW /////////////////////////
// Show errors, if any. (never gets triggered)
@if(count($errors))
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
<form method="POST" action="/cards">
{{ csrf_field() }}
<div class="form-group">
// The textarea does not get populated with the 'old' value as well
<textarea class="form-control" name="title">{{ old('title') }}</textarea>
</div>
<div class="form-group">
<button class="btn btn-primary" type="submit">Add Card</button>
</div>
</form>
3 ответа
Если вы используете Laravel 5.2.27 и выше, вам больше не нужно использовать группу веб-промежуточного программного обеспечения. На самом деле, вы не должны добавлять его в свои маршруты, потому что теперь он автоматически применяется по умолчанию.
Если вы откроете свой app/Http/RouteServiceProvider.php
файл, вы увидите этот бит кода:
protected function mapWebRoutes(Router $router)
{
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require app_path('Http/routes.php');
});
}
Источник: https://github.com/laravel/laravel/blob/master/app/Providers/RouteServiceProvider.php
Как видите, он автоматически применяет промежуточное программное обеспечение для вас. Если вы попытаетесь применить его снова (более одного раза) в файле маршрутов, вы столкнетесь со странными проблемами, такими как те, с которыми вы сталкиваетесь в настоящее время.
Чтобы узнать версию Laravel, которую вы используете, выполните эту команду: php artisan --version
Я полагаю, вы должны установить условие if в @if(count($errors) > 0)
В вашем контроллере попробуйте добавить $validator->fails()
заявление и использование ->withErrors()
чтобы вернуть любые ошибки в ваш шаблон.
public function create(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|min:10'
]);
if ($validator->fails()) {
return back()->withErrors($validator);
}
Card::create($request->all());
return back();
}