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>

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

再然后就是提示框样式问题,如果在laravel框架中可直接引用,本就是Bootstrap的样式;如需其它提示框样式可移步https://v3.bootcss.com/components/#alerts 下的警告框部分定制自己喜欢的样式

你可能感兴趣的:(php,laravel)