Laravel查询参数验证:分页perPage参数的优化问题咨询
解决Laravel分页请求perPage参数的类型与验证问题
你的问题核心在于验证前没先处理字符串类型的perPage参数,导致numeric规则直接抛出验证错误,而非触发默认值10的逻辑。以下是修正后的实现方案:
修正思路
- 先对
perPage做类型转换:尝试将参数转为整数,非数字内容直接设为默认值10 - 再判断转换后的数值是否在10-100范围内,超出范围也设为10
- 最后将处理后的参数传入验证流程,确保验证规则能正常通过
修正后的代码
class PaginateRequest extends FormRequest { public function authorize(): bool { return true; } public function rules(): array { return [ 'perPage' => 'nullable|integer|min:10|max:100', ]; } protected function prepareForValidation() { $perPage = $this->input('perPage'); // 处理类型转换:非数字直接设为10,数字转整数 $processedPerPage = is_numeric($perPage) ? (int)$perPage : 10; // 判断范围,超出则设为10 if ($processedPerPage < 10 || $processedPerPage > 100) { $processedPerPage = 10; } $this->merge([ 'perPage' => $processedPerPage, ]); } }
关键改动说明
- 把
numeric规则改成integer:分页条数必然是整数,规则更精准 - 在
prepareForValidation里先处理类型和范围:确保进入验证环节的perPage要么是10-100的整数,要么就是默认值10,不会触发验证错误 - 用
is_numeric()判断有效数字:兼容字符串形式的数字(比如"20"),同时过滤纯非数字字符串(比如"abc")
这样不管用户传的是超出范围的数字、字符串形式的数字,还是完全非数字的内容,都会被统一处理为合法的perPage值,不会返回验证错误。
内容的提问来源于stack exchange,提问作者Luis Garcia
相关产品推荐
相关产品推荐

