【问题标题】:Laravel 5.2 Validation Error not appearing in bladeLaravel 5.2 验证错误未出现在刀片中
【发布时间】:2016-08-15 12:28:18
【问题描述】:

我想在用户输入错误时在视图页面中显示验证错误。当用户输入错误时,它没有在数据库中保存任何内容是可以的。但是用户视图页面中没有错误消息。如果有人发现错误,请帮助我。

这里是控制器:

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

【问题讨论】:

标签: php laravel validation laravel-5.2 server-side-validation


【解决方案1】:

如果您使用的是 laravel 5.2+,请使用以下代码。

\Illuminate\Session\Middleware\StartSession::class\Illuminate\View\Middleware\ShareErrorsFromSession::class 从网络$middlewareGroups 移动到app\Http\Kernel.php 中的$middleware

【讨论】:

    【解决方案2】:

    Alexey 是正确的,如果您对此不满意,则可以将此代码添加到视图中以显示会话消息。

    @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 中完成了这项工作。请确认这是否对您有帮助。

    【讨论】:

      【解决方案3】:

      在你的控制器中使用下面的行

      使用验证器;

      在发送请求的控制器函数中添加以下代码。

      $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
      

      用于显示单个字段明智的错误。

      【讨论】:

        【解决方案4】:

        如果您使用的是 5.2.27 或更高版本,请尝试删除 web 中间件。现在的问题是 Laravel 自动将 web 中间件应用到 routes.php 内的所有路由,如果您尝试手动添加它,您可能会出错。

        5.2.27 版本的app/Providers/RouteServiceProvider.php 现在将网络中间件添加到routes.php 内的所有路由:

        protected function mapWebRoutes(Router $router)
        {
            $router->group([
                'namespace' => $this->namespace, 'middleware' => 'web',
            ], function ($router) {
                require app_path('Http/routes.php');
            });
        }
        

        【讨论】:

        猜你喜欢
        • 2016-09-12
        • 2023-04-03
        • 1970-01-01
        • 2016-03-28
        • 2017-11-03
        • 2017-03-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        相关资源
        最近更新 更多