Отображение сообщений об ошибках в Laravel после перенаправления с контроллера

Как отобразить сообщение проверки в представлении, которое перенаправляется в Laravel?

Вот моя функция в контроллере

public function registeruser()
{
    $firstname = Input::get('firstname');
    $lastname = Input::get('lastname');
    $data  =  Input::except(array('_token')) ;
    $rule  =  array(
                'firstname'       => 'required',
                'lastname'         => 'required',
                   ) ;
    $validator = Validator::make($data,$rule);
    if ($validator->fails())
    {
    $messages = $validator->messages();
    return Redirect::to('/')->with('message', 'Register Failed');
    }
    else
    {
    DB::insert('insert into user (firstname, lastname) values (?, ?)',
                                array($firstname, $lastname));
    return Redirect::to('/')->with('message', 'Register Success');
    }
    }

Я знаю, что приведенный ниже код - это плохая попытка, но как я могу это исправить и чего не хватает

@if($errors->has())
    @foreach ($errors->all() as $error)
        <div>{{ $error }}</div>
    @endforeach
@endif

Обновление. И как мне отображать сообщения об ошибках рядом с определенными полями?

Ответы

Ответ 1

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

if($validator->fails()) {
    return Redirect::back()->withErrors($validator);
}

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

@if ($errors->any())
        {{ implode('', $errors->all('<div>:message</div>')) }}
@endif

ОБНОВИТЬ

Чтобы отобразить ошибку в каждом поле, вы можете сделать это.

<input type="text" name="firstname">
@if ($errors->has('firstname'))
    <div class="error">{{ $errors->first('firstname') }}</div>
@endif

Для лучшего стиля отображения с помощью css.

Вы можете обратиться к документам здесь.

Ответ 2

Если вы хотите загрузить представление с того же контроллера, на котором вы находитесь:

if ($validator->fails()) {
    return self::index($request)->withErrors($validator->errors());
}

И если вы хотите быстро отобразить все ошибки, но иметь немного больше контроля:

 @if ($errors->any())
     @foreach ($errors->all() as $error)
         <div>{{$error}}</div>
     @endforeach
 @endif

Ответ 3

@if ($errors->has('category'))
    <span class="error">{{ $errors->first('category') }}</span>
@endif

Ответ 4

Переместите все это в kernel.php, если только выше описанный метод не работает, вы помните, что вам нужно переместить все эти строки в kernel.php в дополнение к вышеуказанному решению

позвольте мне сначала показать, как он находится в файле уже..

protected $middleware = [

    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
];

/**
 * The application route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];

теперь вам нужно сделать

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
     \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
];

/**
 * The application route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [

    ],

    'api' => [
        'throttle:60,1',
    ],
];

то есть;

enter image description here

Ответ 5

{!! Form::text('firstname', null !!}

@if($errors->has('firstname')) 
    {{ $errors->first('firstname') }} 
@endif