Laravel自定义验证器实现

验证器的概述

什么是验证器?首先记住一点服务器不要相信客户端传来的数据都是合法的,我们把验证客户端传来数据的过程称之为验证器。他的好处就是就和他的字面意思一样,保证服务器接收的数据都是合法的。

自定义验证

开发人员实现自定义验证,其实就是改变验证的描述。因为laravel验证不通过的提示信息是英文的,对国人来说不是那么通俗易懂。还有一个场景就是laravel提供的验证描述不能说明我们想要描述,这个时候我们就要自定义。

第一步我们首先创建自定义验证器

class Bade
{
	protected $rule = [];
	protected $message = [];
	/**
	*Description 对提交数据进行验证
	*/
	public function goCheck($date=[], $exception = BaseException::class)
	{
		if(empty($data)){
			$request = new Request();
			$param = $request->except(key:'_method');
		}else{
			$param = $data;
		}
	
		$validate = Validator::make($param,    $this->rule, this->message);
		if($validate->fails()){
			$e = new $exception([
				'msg' => $validate->errors()
			]);
			throw $e;
		}else{
			return true;
		}
	}
}

由上图我们可以看到,验证失败就要调用fails()函数,启动验证是make方法,第一个参数是要验证的数据,第二个参数是验证的规则,第三个参数是验证失败信息的描述;

我们创建了两个保护的属性,一个是规则,一个是验证失败描述的信息;

注意:我们在验证不通过的时候,我在这抛出了异常,这个是我的做法,你还可以直接自定义返回给客户端数据格式。比如

return [
	'errorMessage' => $validate->errors(),
	'status' =>0,
	'data' => []
]

第二步我们创建自定义的规则

class IDValidate extends Base
{
	public $rule = [
		'id' => 'required|integer|filled'
	];
	public $message = [
		'id.required' => '没有传ID的参数,请检查参数',
		'id.integer' => 'id必须是整数',
		'id.filled' => 'id的值不能为空值'
	];
}

我们定义验证的规则要重写Base属性。

表单数据的验证

我们的数据格式如下

[
	0 => [
		'name' => 'luck',
		'email'=> '@163.com'
	],
	1 => [
		'name' => 'luck',
		'email'=> '@163.com'
	],
	2 => [
		'name' => 'luck',
		'email'=> '@163.com'
	],
]

验证规则

public $rule = [
	'*.name' => 'required|integer|filled',
	'*.email' => 'required|integer|filled|email',
];

在相关控制器调用自定义验证

public function getBanner()
{
	$id = \request('id');
	(new IDValidate())->goCheck([], BannerException::class);
	$info = Banner::getBanner($id);
	if(empty($info)){
		throw new BannerException();
	}
	return $info;
}

总结

1、我们不要相信客户端传来的数据都是合法的,我们一定要做数据的验证。 2、普通字段的验证就是常规的,字段加验证规则;
3、表单自定义验证就是看数据格式是几维数据,二维就是上面的,三维就是product.*.id类似这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值