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

Laravel replace validation value not showing in validated() array

在我的 blade 表单中,我有一个输入字段,要求输入一个小时值,比方说 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,
    ]);
}

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

来自 FormRequest 上 validated 方法的数据来自验证器,而不是 FormRequest 本身。因此,如果您真的想使用 FormRequest 执行此操作并能够调用该 validated 方法,则必须调整验证器持有的数据或调整 validated 方法。

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

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

    $this->validator->setData(
        ['input_stage_hour' => $data['input_stage_hour'] * 60] + $data
    );
}

如果您想覆盖 validated 方法:

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

    return ['input_stage_hour' => $data['input_stage_hour'] * 60] + $data;
}