Laravel 替换验证值未显示在 valid() 数组中

Big*_*ies 0 php laravel laravel-validation

在我的刀片形式中,我有一个输入字段要求输入小时值,比方说input_stage_hour

我试图在验证后将其转换为分钟,但在它到达我的控制器之前...在我的表单请求中,我使用该passedValidation方法将小时转换为分钟,然后在我的控制器中,我使用填充我的模型$request->validated()

问题是,它传递的是原始值而不是转换后的值。

我的简化表格请求如下;

public function rules()
{
    return [
        'input_stage_hour' => ['required', 'numeric', 'integer'],
    ];
}

protected function passedValidation()
{
    $this->replace([
        'input_stage_hour' => intval($this->input_stage_hour) * 60,
    ]);
}
Run Code Online (Sandbox Code Playgroud)

如果我将一个值传递2input_stage_hour然后dd($request->validated())在我的控制器中,它仍然显示值 2 而不是120

lag*_*box 5

来自 FormRequest 上该方法的数据validated来自 Validator,而不是 FormRequest 本身。因此,如果您确实想使用 FormRequest 执行此操作并能够调用该validated方法,则必须调整 Validator 保存的数据或调整该validated方法。

尝试调整验证器持有的数据的示例:

protected function passedValidation()
{
    $data = $this->validator->getData();

    $this->validator->setData(
        ['input_stage_hour' => $data['input_stage_hour'] * 60] + $data
    );
}
Run Code Online (Sandbox Code Playgroud)

如果你想重写该validated方法:

public function validated()
{
    $data = parent::validated();

    return ['input_stage_hour' => $data['input_stage_hour'] * 60] + $data;
}
Run Code Online (Sandbox Code Playgroud)