Laravel中能否在自定义Request类内部访问$request变量?
在Laravel自定义Request类中访问请求变量的方法
当然可以在自定义Request类内部访问请求变量,因为自定义Request类本身就继承自Illuminate\Http\Request,和控制器里的$request是同一类实例,以下是几种常用的实现方式:
直接在
rules()方法中使用$this
你可以通过$this->字段名直接获取请求参数,甚至能根据参数值动态生成验证规则:public function rules() { return [ // 和控制器内的required_if规则写法完全一致 'credit_card_number' => 'required_if:payment_type,cc', // 动态调整规则示例 'billing_address' => $this->payment_type === 'cc' ? 'required' : 'nullable', ]; }在
withValidator()中扩展验证逻辑
如果需要添加后置验证等自定义逻辑,可在withValidator()方法里通过$this或$validator->getData()获取请求数据:public function withValidator($validator) { $validator->after(function ($validator) { if ($this->payment_type === 'cc' && !$this->credit_card_number) { $validator->errors()->add('credit_card_number', '选择信用卡支付时,卡号不能为空'); } }); }调用Request原生方法
和控制器里的$request用法一致,你也可以使用$this->input('payment_type')、$this->all()等方法获取请求数据,适配不同的取值场景。
自定义Request类的核心就是将验证逻辑从控制器剥离,同时完整保留了Request实例的所有能力,访问请求变量是完全可行的,这也是Laravel推荐该实践的原因之一。
内容的提问来源于stack exchange,提问作者TAVARES
相关产品推荐
相关产品推荐

