Laravel 5.2 blade 中未出现验证错误
Laravel 5.2 Validation Error not appearing in blade
我想在用户输入错误时在查看页面中显示验证错误。没关系,当用户输入错误时,它不会在数据库中保存任何内容。但是用户查看页面没有错误信息。如果有人发现错误,请帮助我。
这是控制器:
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',
]);
});
这里是 blade 查看页面:
@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
这里是 error-message 块:
@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
如果您使用的是 5.2.27 或更高版本,请尝试删除 web
中间件。现在 Laravel 自动将 web
中间件应用于 routes.php
内的所有路由,如果您尝试手动添加它,您可能会出错。
5.2.27版本的app/Providers/RouteServiceProvider.php
现在为routes.php
:
内的所有路由增加了web中间件
protected function mapWebRoutes(Router $router)
{
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require app_path('Http/routes.php');
});
}
在控制器中使用 Below 行
使用验证器;
在发送请求的控制器函数中添加以下代码。
$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
用于显示个别字段错误。
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 中完成了此操作。请确认这是否对您有帮助。
如果您使用的是 laravel 5.2+,请使用以下代码。
已将 \Illuminate\Session\Middleware\StartSession::class
和 \Illuminate\View\Middleware\ShareErrorsFromSession::class
从网络 $middlewareGroups
移动到 app\Http\Kernel.php
中的 $middleware
我想在用户输入错误时在查看页面中显示验证错误。没关系,当用户输入错误时,它不会在数据库中保存任何内容。但是用户查看页面没有错误信息。如果有人发现错误,请帮助我。
这是控制器:
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',
]);
});
这里是 blade 查看页面:
@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
这里是 error-message 块:
@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
如果您使用的是 5.2.27 或更高版本,请尝试删除 web
中间件。现在 Laravel 自动将 web
中间件应用于 routes.php
内的所有路由,如果您尝试手动添加它,您可能会出错。
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');
});
}
在控制器中使用 Below 行
使用验证器;
在发送请求的控制器函数中添加以下代码。
$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
用于显示个别字段错误。
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 中完成了此操作。请确认这是否对您有帮助。
如果您使用的是 laravel 5.2+,请使用以下代码。
已将 \Illuminate\Session\Middleware\StartSession::class
和 \Illuminate\View\Middleware\ShareErrorsFromSession::class
从网络 $middlewareGroups
移动到 app\Http\Kernel.php
$middleware