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

Laravel自定义Rule类中如何在passes方法获取其他请求参数?

在Laravel自定义Rule中访问Request参数的解决方案

这里有两种实用的方法,能让你在TestCustom规则的passes方法里轻松获取$request->important参数,完成对name字段的验证:

方法一:构造函数注入Request(推荐,利于测试)

通过Laravel的服务容器,我们可以把Request对象直接注入到自定义Rule的构造函数中,这样就能在整个类里便捷使用它:

use Illuminate\Http\Request;
use Illuminate\Contracts\Validation\Rule;

class TestCustom implements Rule {
    // 声明属性存储Request实例
    protected $request;

    // 构造函数注入Request
    public function __construct(Request $request) {
        $this->request = $request;
    }

    public function passes($attribute, $value) {
        // 获取important参数值
        $importantValue = $this->request->input('important');
        
        // 这里编写你的具体验证逻辑,举个示例:
        return $value === $importantValue;
    }

    public function message() {
        return '名称必须与重要参数匹配';
    }
}

使用时完全不用修改你原有的代码——Laravel会自动帮你注入Request实例:

use App\Rules\TestCustom;
$request->validate([
    'name' => ['required', new TestCustom],
    'important' => ['required', 'string'],
]);

方法二:在passes方法中直接获取Request实例

如果觉得构造函数注入有点繁琐,也可以直接在passes方法里用辅助函数快速获取Request:

use Illuminate\Contracts\Validation\Rule;
use Illuminate\Http\Request;

class TestCustom implements Rule {
    public function passes($attribute, $value) {
        // 通过app()辅助函数拿到Request实例
        $request = app(Request::class);
        $importantValue = $request->input('important');
        
        // 你的验证逻辑
        return $value === $importantValue;
    }

    public function message() {
        return '名称必须与重要参数匹配';
    }
}

小提醒

因为你已经给important字段加了required规则,只要请求能走到name的验证环节,important参数就一定存在。如果担心验证顺序问题,也可以把important的验证规则放在name前面,不过其实不管顺序,Request里的原始参数都是可以直接获取的。

内容的提问来源于stack exchange,提问作者Bolek Lolek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:20:57