最近在做表单验证的时候,本想着验证一个整数是否在某个范围内,发现一直验证失败,通过查看源码才发现还要加入条件才能验证,下面将讲解需要注意地方。
刚开始时验证term这个值是否在1-24之间,下面举例说明:

1
2
3
4
5
$validator = Validator::make($data, [
'term' => 'between:1,24',
], [
'term.between' => '',
]);

$data传入term=3,发现验证失败,查看手册没发现有什么不对的地方,于是开始查找源代码,找到该验证的源码如下:

between_1

第一个方法requireParameterCount,只是验证参数的数量的方法,没有影响值的大小,再往下看第二个方法getSize,传入$attribute$value,源代码如下:

between_2

这个方法可以大概理解成根据不同的类型的变量获取相对应的值,值得注意的是打圆圈的地方,该判断不是单单判断是否是数值,还判断了$hasNumeric这个值,这个值获取的方法是hasRule,这个方法有一个参数需要注意,$this->numericRules传的是[‘Numeric’, ‘Integer’],通过该方法再找到getRule方法;源码如下:

between_3

通过源码可以知道,该方法是获取验证规则的变量,没有会返回null;到这里终于明白,要验证term是否在1-24之间,必须先验证term是否是数值,只有符合是数值的前提,才验证term的范围,修改后的代码如下:

1
2
3
4
5
6
$validator = Validator::make($data, [
'term' => 'numeric|between:1,24',
], [
'term.numeric' => '',
'term.between' => ''
]);

最后终于能正常验证了,所以遇到Laravel手册不能解决的问题,最好还是多看看源码,通过查看源码总能找到问题的解决办法。

最后更新: 2018年01月06日 17:01

原始链接: http://blog.minhow.com/articles/laravel/form-validation/

× 请我吃糖~
打赏二维码