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


Я хочу показать ошибку проверки на странице просмотра, когда пользователь вводит неверные данные. Это нормально, что он ничего не сохраняет в базе данных, когда пользователь вводит неверные данные. Но на странице просмотра пользователя нет сообщения об ошибке. Если кто-нибудь обнаружит ошибку, пожалуйста, помогите мне.

Вот контроллер:

public function saveUser(Request $request){
        $this->validate($request,[
            'name' => 'required|max:120',
            'email' => 'required|email|unique:users',
            'phone' => 'required|min:11|numeric',
            'course_id'=>'required'
            ]);

        $user = new User();
        $user->name=  $request->Input(['name']);
        $user->email=  $request->Input(['email']);
        $user->phone=  $request->Input(['phone']);
        $user->date = date('Y-m-d');
        $user->completed_status = '0';
        $user->course_id=$request->Input(['course_id']);
        $user->save();
       return redirect('success');         
    }

Вот маршрут:

Route::group(['middleware' => 'web'], function () {

    Route::get('/', function () {
        return view('index');
    })->name('main');

      Route::post('/saveUser',[
        'uses' => 'AppController@saveUser',
        'as'=>'saveUser',
        ]);
    });

Вот страница просмотра блейда:

@extends('layouts.master')
@section('title')
Create User
@endsection
@section('content')
@include('partials.message-block')
        <div class="container" >

            <h3> Student Register </h3>

        {!! Form::open(array('route' => 'saveUser','class'=>'form-horizontal','method'=>'POST'))  !!}
      {!! Form::token(); !!}
      {!!   csrf_field() ; !!} 

        <div class="form-group">
          <label>Name</label>
          <input type="text" name="name" class="form-control" required placeholder="Name">
        </div>

        <div class="form-group">
          <label>Email</label>
          <input type="email" name="email" class="form-control" required placeholder="email">
        </div>

        <div class="form-group">
          <label>Phone Number</label>          
          <input type="text" name="phone" class="form-control" required placeholder="phone">
        </div>

        <div class="form-group">
            <label for="">Class</label>
            <select class="form-control input-sm" name="course_id" >
            @foreach($input as $row)
            <option value="{{$row->id}}">{{$row->name}}</option>
            @endforeach
            </select>
        </div>  

        <button type="submit" class="btn btn-default">Submit</button>
    {!! Form::close() !!}
        </div>

@endsection

А вот блок сообщений об ошибках:

@if(count($errors) > 0)
    <div class="row">
        <div class="col-md-4 col-md-offset-4 error">
            <ul>
                @foreach($errors->all() as $error)
                    <li>{{$error}}</li>
                @endforeach
            </ul>
        </div>
    </div>
@endif
@if(Session::has('message'))
<div class="row">
    <div class="col-md-4 col-md--offset-4 success">
        {{Session::get('message')}}
    </div>
</div>

@endif
Author: Visakh B Sujathan, 2016-04-22

3 answers

Попробуйте удалить web промежуточное программное обеспечение, если вы используете версию 5.2.27 или выше. Дело в том, что теперь Laravel автоматически применяет промежуточное программное обеспечение web ко всем маршрутам внутри routes.php, и если вы пытаетесь добавить его вручную, вы можете получить ошибки.

app/Providers/RouteServiceProvider.php версии 5.2.27 теперь добавляет веб-промежуточное программное обеспечение ко всем маршрутам внутри routes.php:

protected function mapWebRoutes(Router $router)
{
    $router->group([
        'namespace' => $this->namespace, 'middleware' => 'web',
    ], function ($router) {
        require app_path('Http/routes.php');
    });
}
 22
Author: Alexey Mezenin, 2016-05-04 11:43:32

Используйте нижеприведенную строку в своем контроллере

Использовать Валидатор;

Добавьте приведенный ниже код в функцию контроллера, куда отправляется ваш запрос.

$validator  =   Validator::make($request->all(), [
     'fname'     =>  'required|max:20|min:4',
     'uemail'    =>  'required|email',
     'message'   =>  'required',
 ]);                                                                                                                                                                                                                               
if ($validator->fails()) {
       $messages = $validator->messages();
       return Redirect::back()->withErrors($messages)->withInput($request->all()); 
 }      

На странице просмотра

 @if ($errors->any())
   <label for="fname" class="error">{{ $errors->first('fname') }}</label> 
 @endif

Для отображения индивидуальной ошибки по полю.

 0
Author: Kanu, 2017-04-03 10:41:52

Алексей прав, и если вас это не устраивает, вы можете просто добавить этот код в свое представление для отображения сообщений сеанса.

@if(Session::has('message'))
            <div class="alert alert-success">{{Session::get('message')}}</div>
        @endif
        @if(count($errors)>0)

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

Я сделал это в laravel 5.5. Пожалуйста, подтвердите, поможет ли это вам.

 0
Author: Hassaan Ali, 2018-04-06 12:50:32