You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel查询参数验证:分页perPage参数的优化问题咨询

解决Laravel分页请求perPage参数的类型与验证问题

你的问题核心在于验证前没先处理字符串类型的perPage参数,导致numeric规则直接抛出验证错误,而非触发默认值10的逻辑。以下是修正后的实现方案:

修正思路

  1. 先对perPage做类型转换:尝试将参数转为整数,非数字内容直接设为默认值10
  2. 再判断转换后的数值是否在10-100范围内,超出范围也设为10
  3. 最后将处理后的参数传入验证流程,确保验证规则能正常通过

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:57:36