当前位置: 首页 > article >正文

Laravel 6.2 表单验证之表单请求验证

Laravel表单验证的方式之一,可通过单独的规则文件来验证请求中的参数,对不符合规则的情况下,自动跳转至表单页面并携带错误提示信息,可以达到参数验证与数据入库等业务分层处理。

创建表单验证文件

命令:

php artisan make:request ScoreGoodsRequest

在http下会新增一个Requests文件夹和表单请求验证文件

开启请求验证

默认是false,改为true。也可以在此处理对用户是否进行验证的权限判断

public function authorize()
{
    return true;
}

 

自定义验证规则

设置验证规则。验证规则可通过查看官方文档《可用验证规则》

/**
 * 设置验证规则
 * 此处应用了验证场景【新增、编辑】
 * @return array
 */
public function rules()
{
    // 新增使用POST提交
    if(request()->method() == 'POST')
    {
        return [
            'name'       =>     'required|unique:score_goods',
            'desc'       =>     'required',
            'price'      =>     'required|regex:/^\d{1,8}$/',
            'score'      =>     'required|regex:/^\d{1,8}$/',
            'sort'       =>     'required|regex:/^\d{1,4}$/',
       ];
    } else {
        // 编辑使用PATCH提交
        return [
            'name'      =>      'required',
            'desc'      =>      'required',
            'price'     =>      'required|regex:/^\d{1,8}$/',
            'score'     =>      'required|regex:/^\d{1,8}$/',
            'sort'      =>      'required|regex:/^\d{1,4}$/'
        ];
    }
}

自定义错误提示

可以通过重写表单请求的 messages 方法来自定义错误消息。

/**
 * 自定义错误提示
 * @return array
 */
public function messages()
{
    return [
        'name.required'       =>  '请输入商品名称!',
        'name.unique'         =>  '商品已存在,不可重复添加!',
        'desc.required'       =>  '请输入商品描述!',
        'price.required'      =>  '请输入商品价格!',
        'price.regex'         =>  '商品单价为数字,应大于1!',
        'score.required'      =>  '请输入兑换积分!',
        'score.regex'         =>  '商品兑换积分为数字,应大于1!',
        'sort.required'       =>  '请输入商品排序!',
        'sort.regex'         =>  '商品排序为数字,应大于1!',
    ];
}

 

控制器调用

/**
 * 新增商品保存
 * @param ScoreGoodsRequest $request
 * @return \Illuminate\Http\RedirectResponse
 */
public function store(ScoreGoodsRequest $request)
{
    $return = $this->exchangeService->addGoods($request->all());

    return redirect()->route('goods.create');
}

 

处理错误信息

如果传入的请求参数未通过给定的验证规则,Laravel 会自动把用户重定向到之前的位置。另外,所有的验证错误信息会被自动存储到 session。

不用在 GET 路由中将错误消息显式绑定到视图。Lavarel 会检查在 Session 数据中的错误信息,并自动将其绑定到视图。而其中的变量 $errors 是 Illuminate\Support\MessageBag 的一个实例。

当验证失败的时候,用户将会被重定向到控制器的 create/edit 方法,使我们能在视图中通过$error显示错误信息:

<!-- /resources/views/goods/create.blade.php -->

<form class="form-horizontal m-t-md" action="{{ route('goods.store') }}" method="post" accept-charset="UTF-8" enctype="multipart/form-data">
    {!! csrf_field() !!}
    <div class="form-group">
        <label class="col-sm-2 control-label">商品名称:</label>
        <div class="input-group col-sm-4">
            <input type="text" class="form-control" name="name" value="{{old('name') ?? ''}}" required>
            @if ($errors->has('name'))
                <span class="help-block m-b-none"><i class="fa fa-info-circle"></i>{{$errors->first('name')}}</span>
            @endif
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-2 control-label">商品描述:</label>
        <div class="input-group col-sm-4">
            <input type="text" class="form-control" name="desc" value="{{old('desc') ?? ''}}" required>
            @if ($errors->has('desc'))
                <span class="help-block m-b-none"><i class="fa fa-info-circle"></i>{{$errors->first('desc')}}</span>
            @endif
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-2 control-label">商品单价:</label>
        <div class="input-group col-sm-4">
            <input type="text" class="form-control" name="price" value="{{old('price') ?? ''}}" required>
            @if ($errors->has('price'))
                <span class="help-block m-b-none"><i class="fa fa-info-circle"></i>{{$errors->first('price')}}</span>
            @endif
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-2 control-label">兑换积分:</label>
        <div class="input-group col-sm-4">
            <input type="number" class="form-control" name="score" value="{{old('score') ?? ''}}" required>
            @if ($errors->has('score'))
                <span class="help-block m-b-none"><i class="fa fa-info-circle"></i>{{$errors->first('score')}}</span>
            @endif
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-2 control-label">商品备注:</label>
        <div class="input-group col-sm-4">
            <input type="text" class="form-control" name="remark" value="{{old('remark') ?? ''}}">
            @if ($errors->has('remark'))
                <span class="help-block m-b-none"><i class="fa fa-info-circle"></i>{{$errors->first('remark')}}</span>
            @endif
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-2 control-label">商品排序:</label>
        <div class="input-group col-sm-4">
            <input type="number" class="form-control" name="sort" value="{{old('sort') ?? 0}}" required>
            @if ($errors->has('sort'))
                <span class="help-block m-b-none"><i class="fa fa-info-circle"></i>{{$errors->first('sort')}}</span>
            @endif
        </div>
    </div>
    <div class="form-group">
        <div class="col-sm-5 text-center">
            <button class="btn btn-primary" type="submit"><i class="fa fa-check"></i>&nbsp;保 存</button>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <button class="btn btn-white" type="reset"><i class="fa fa-repeat"></i>&nbsp;重 置</button>
        </div>
    </div>
    <div class="clearfix"></div>
</form>

<!-- Create Post Form -->

 

实现效果

 


http://www.kler.cn/a/9721.html

相关文章:

  • 【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩
  • 开发语言中,堆区和栈区的区别
  • React的基础API介绍(二)
  • 豆瓣均分9:不容错过的9本大模型入门宝藏书籍,非常详细收藏我这一篇就够了
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何查看PDS系统的自阻抗操作指导
  • pySpark乱码
  • 如何免费使用ChatGPT 4?
  • postgres创建分区表
  • Java Stream API 操作完全攻略:让你的代码更加出色 (三)
  • 安装cmake
  • 2023年全国最新安全员精选真题及答案48
  • 从零开始学习Java神经网络、自然语言处理和语音识别,附详解和简易版GPT,语音识别完整代码示例解析
  • 食堂总是拥挤不堪?解决用餐拥挤,教你一招
  • stm32当中的EXTI外部中断系统
  • Ubuntu系统配置SonarQube + cppcheck + Jenkins
  • docker使用具体教程,入门方法你懂了吗?
  • NVT | NVT SDK播报语音制作
  • 每日刷题记录(十)
  • 刚入职场的年轻开发人员应该如何提高自己的技能,掌握哪些知识
  • LOTO示波器电源环路增益分析客户实测
  • Kotlin语法-Day10
  • EndNote X9 插入参考文献方法 及论文参考文献常见问题总结
  • idea无maven选项
  • 佳明手表APP开发系列01——简单汉化英文版
  • synchronized的简单理解
  • QT样式表详解