laravel5.5之表单验证
最近在从lara基础学习框架,根据手册弄了两种表单验证,先来晒一下自己总结的吧;
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
// 文章内容是符合规则的,存入数据库
}
第一种是依赖Illuminate\Http\Request对象提供的validate,如果验证不通过则会返回到上一个页面,并自动把错误信息带过去,不过需要自己展示,错误信息的展示稍后再介绍
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
// 保存文章
}
第二种就是手动创建验证器,这种方法需要在控制器手动use Validator;在验证之后需要在下面加上判断,并手动返回错误信息,这样看,还是第一种方便多了;
验证规则:手册上给了很多自定义规则和错误信息之类的,并没有综合到一块;以上这两种方法后面其实是可以继续放参数的,标准写三个就可以满足大家的业务需求;参数:[‘每个字段的验证规则’,’翻译规则成中文’,’翻译字段为中文’],我先举个列子
public function insertMenu(Request $request){
$input = $request->input('Menus');
//第一种方法
$request->validate([
'Menus.title' => 'required|min:2|max:10',
'Menus.fmenuid' => 'required|integer',
'Menus.rank' => 'required|integer',
'Menus.ishow' => 'required|integer',
],[
'required' => ':attribute为必填项',
'integer' => ':attribute为整数',
],[
'Menus.title' => '标题',
'Menus.fmenuid' => '视频分类id',
'Menus.rank' => '排序',
'Menus.ishow' => '是否上架',
]);
//第二种方法
//手动创建验证器
$validator = Validator::make($request->all(), [
'Menus.title' => 'required|min:2|max:10',
'Menus.fmenuid' => 'required|integer',
'Menus.rank' => 'required|integer',
'Menus.ishow' => 'required|integer',
],[
'required' => ':attribute为必填项',
'integer' => ':attribute为整数',
],[
'Menus.title' => '标题',
'Menus.fmenuid' => '视频分类id',
'Menus.rank' => '排序',
'Menus.ishow' => '是否上架',
]);
if ($validator->fails()) {
return redirect()
->back()
->withErrors($validator)
->withInput();
}
$menuModel = new MenuIndex();
$menuModel->title = $input['title'];
$menuModel->fmenuid = $input['fmenuid'];
$menuModel->ishow = $input['ishow'];
$menuModel->rank = $input['rank'];
if($menuModel->save()){
return redirect('admin/menuindex/menuList')->with('success','添加成功');
}else{
return redirect()->back()->with('error','添加失败');
}
}
当验证过表单提交过来的数据,验证失败后我们要在view层展示详细错误信息数据(一样是两种,这一种是循环展示,一种是在每个输入行后面显示)
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }};</li>
@endforeach
</ul>
</div>
@endif
<tr>
<th><i class="require-red">*</i>视频分类Id<br/> (fmenuid)</th>
<td>
<input class="common-text" name="Menus[fmenuid]" value="{{ old('Menus')['fmenuid'] }}" size="50" type="text">
<span style="margin-left:30px;" class='alert-danger'>{{ $errors->first('Menus.fmenuid')}}</span>
</td>
</tr>
图中上方为第一种展示方式,下方的为第二种错误信息展示方式;因为我在表单中name是以数组形式(Menus[fmenuid])这样命名,在控制器验证也一样要注意相应的接收的数据,不然会被坑到;
再然后就是提示框样式问题,如果在laravel框架中可直接引用
<link rel="stylesheet" href={{asset('css/app.css')}}">
,本就是Bootstrap的样式;如需其它提示框样式可移步https://v3.bootcss.com/components/#alerts 下的警告框部分定制自己喜欢的样式
上一篇: Laravel5.5的提示跳转页
下一篇: 如何检查Win11是否开启系统还原?