Ошибка проверки в 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();
}
Другие вопросы по тегам