欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

laravel5.5之表单验证

程序员文章站 2022-03-10 09:56:00
...

最近在从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>

laravel5.5之表单验证
图中上方为第一种展示方式,下方的为第二种错误信息展示方式;因为我在表单中name是以数组形式(Menus[fmenuid])这样命名,在控制器验证也一样要注意相应的接收的数据,不然会被坑到;

再然后就是提示框样式问题,如果在laravel框架中可直接引用<link rel="stylesheet" href={{asset('css/app.css')}}">,本就是Bootstrap的样式;如需其它提示框样式可移步https://v3.bootcss.com/components/#alerts 下的警告框部分定制自己喜欢的样式