Laravel表单验证,优雅一点的写法,控制器里面不要写太多东西,

本文介绍了一种在Laravel框架中实现数据验证的方法。通过创建BaseValidator基类和GoodsValidator子类,实现了灵活的数据验证机制。该机制支持场景验证,并在验证失败时抛出异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先  BaseValidator基类

<?php

namespace App\Http\Requests;
use Illuminate\Support\Facades\Validator;

class BaseValidator
{

    /**Validator基类方法。验证失败就抛出异常
     * Notes:
     * User: ChenJulong
     * Date: 2019/7/16
     * Time: 17:09
     * @param $data
     * @param bool $scen
     * @param $rules
     * @param $message
     */
    public function yanzheng($data,$scen=false,$rules,$message){
        if (is_array($scen)){
            foreach ($scen as $k){
                //删除scen中没有的验证参数
                $rules_new[$k]=$rules[$k];
            }
            $validator=Validator::make($data,$rules_new,$message);
        }else{
            //如果不存在数据验证分组,直接make
            $validator=Validator::make($data,$rules,$message);
        }
        if ($validator->fails()){
            //验证数据不通过,跑出异常
            $arr=array(
                'message'=>$validator->errors()->first()  ,
                'date'=>'参数错误',
                'status'=>800,
            );
            exit(json_encode($arr,JSON_UNESCAPED_UNICODE));
        }
    }
}

 

再设置UserValidator

 

<?php

namespace App\Http\Requests;

class GoodsValidator extends BaseValidator
{

    protected $rules=array(
        'name'=>'required',
        'pass'=>'required',
        'test'=>'required'
    );

    protected $message=array(
        'name.required' => '用户名不能为空',
        'pass.required'=>'密码不能为空',
    );

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return false;
    }

    /**自定义的scen,数据分组。可以传入此值作为只验证那些信息
     * Notes:
     * User: ChenJulong
     * Date: 2019/7/16
     * Time: 17:05
     * @param bool $scen
     * @return bool|mixed
     */
    public function scen($scen=false){
        $s=array(
            'login'=>['name','pass'],
        );
        if ($scen){
            return $s[$scen];
        }else return false;
    }

    /**
     * Notes:
     * User: ChenJulong
     * Date: 2019/7/16
     * Time: 16:28
     * @param $data
     */
    public function check($data,$scen=false){
        $this->yanzheng($data,$this->scen($scen),$this->rules,$this->message);
    }
}

 

 

最后再控制器中调用

 

    public function test(Request $request){
        $input=$request->all();
        (new GoodsValidator())->check($input);
    }

 

没找到laravel5.8中再哪里可以用Request::all()之类的方法来获取参数,才开始接触laravel。

不然的话还可以更优雅一点。

自己加了一个类似于thinkphp的scen 来作为只验证那些参数

申研社-陈杰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值