Laravel 6.2 表单验证之快速验证

 Laravel表单验证的方式之一,与表单请求验证不同的地方在于,不需要创建单独的规则文件,而是使用 Illuminate\Http\Request 实例中的validate方法直接设置规则进行验证;可以达到与表单请求验证同样的效果。

目录

业务使用

设置路由

创建控制器

设置验证逻辑

自定义错误提示

处理错误信息

视图处理

实现效果

​编辑

总结


 

业务使用

在实际业务使用中,我这边在运营后台结合资源路由进行使用。

设置路由

// 积分商品管理
Route::resource('goods', 'ExchangeController', ['only' => ['index', 'create', 'store', 'update', 'edit']]);

创建控制器

创建新增和保存方法,在保存方法中对实参$request通过门面Request进行验证。

/**
 * 新增商品页面
 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 */
public function create()
{
    return view('goods.create');
}


/**
 * 新增商品保存
 * @param \Illuminate\Http\Request $request
 * @return \Illuminate\Http\RedirectResponse
 */
public function store(\Illuminate\Http\Request $request)
{
    // 验证并存储商品
}

设置验证逻辑

是通过$request取得validate方法,并传入验证规则来使用。

public function store(\Illuminate\Http\Request $request)
{
    $validate = $request->validate([
        '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}$/',
    ]);

    // 验证通过 存储商品
    echo '验证通过 存储商品';die;
}

如果验证失败,会自动返回失败的响应。如果验证通过,那请求将会继续向下运行。

自定义错误提示

如果不设置验证错误提示,系统默认的错误提示为英文的。

validate的第二个参数设置自定义错误提示,要与上面的规则一一对应。

$validate = $request->validate([
    '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}$/',
  ], [
    'name.required'       =>  '请输入商品名称!',
    'name.unique'         =>  '商品已存在,不可重复添加!',
    'desc.required'       =>  '请输入商品描述!',
    'price.required'      =>  '请输入商品价格!',
    'price.regex'         =>  '商品单价为数字,应大于1!',
    'score.required'      =>  '请输入兑换积分!',
    'score.regex'         =>  '商品兑换积分为数字,应大于1!',
    'sort.required'       =>  '请输入商品排序!',
    'sort.regex'         =>  '商品排序为数字,应大于1!',
 ]);

处理错误信息

如果传入的请求参数未通过给定的验证规则,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 -->

实现效果

总结

快速验证不需要创建单独的规则文件,而是使用 validate方法直接设置规则进行验证;可以达到与表单请求验证同样的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值