如何在 rules() 函数中访问请求 payload/post 数据 - Laravel 表单请求

How to access request payload/post data inside rules() function - Laravel Form Request

我试图在我的 FormRequest 验证器 Class 中的 rules() 函数中访问一个名为“section”的数据。我想做的是检查“section”的值和 return 不同的规则。但显然,我无法访问 data/payload.

的值

我已经从这里检查了答案,但它对我不起作用:

这是我的代码:

FormController.php

class FormController extends Controller
{
public function verify(DynamicFormRequest $request , $section)
  {
      return response()->json(['success' => 'everything is ok']); 
  }
}

DynamicFormRequest.php

class DynamicFormRequest extends FormRequest
{

    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        error_log($this->request->get('section'));//retruns null and depricated
        error_log($this->request->input('section')); //this is absolutely wronge but , i tried it anyways
        error_log($this->request->section); //retruns null
        error_log($this->section); //retruns null
        switch ($this->request->get('section')) {
            case '1':
                return [
                    'item_name' => 'required',

                ];
                break;
            case 'Type2':
                return [ 
                    'item_favorite' => 'required',
                ];
                break; 
        }
    }
}

请帮我弄明白怎么了

您可以使用required_if:anotherfield,value检查其他字段的值

return [
  'item_name' => 'required_if:section,1',
  'item_favorite' => 'required_if:section,Type2'
]

https://laravel.com/docs/9.x/validation#rule-required-if

希望对您有所帮助

如果您正在使用路由模型绑定,您可以立即使用 $this->section

假设您的路线设置格式正确,这应该可以工作:

 error_log($this->section);

路线(类似……):

  Route::post('section/{section}', [SectionController::class, 'update']);

这个问题可能有帮助:

最后,如果没有您的其他代码,很难知道它是否正常工作。你有没有把 $request 倒出来检查 section 在那里?