Laravel 5.2 Validation Error not appearing in blade

假如想象 提交于 2019-11-26 03:18:58

问题


I want to show validation Error in View page while user giving wrong input. It\'s Ok that it\'s not saving anything in database while a user giving wrong input. But there is no error message in user view page. If anyone find the error, please help me out.

Here is the controller:

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\');         
    }

Here is the route:

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

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

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

Here is the blade view page:

@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

And here is the error-message block:

@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

回答1:


Try to remove web middleware if you're using 5.2.27 or higher. The thing is now Laravel automatically applies web middleware to all routes inside routes.php and if you're trying to add it manually you can get errors.

app/Providers/RouteServiceProvider.php of the 5.2.27 version now adds web middleware to all routes inside routes.php:

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



回答2:


Use Below line in your controller

use Validator;

Add below code in your controller function where your request is sent.

$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()); 
 }      

In your view page

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

For display individual field wise error.




回答3:


Alexey is correct and if you're not comfortable with that then you can just add this code into your view for the session messages to show.

@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

I've done this in laravel 5.5. Please do confirm if this helps you out.



来源:https://stackoverflow.com/questions/36784253/laravel-5-2-validation-error-not-appearing-in-blade

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!