【问题标题】:Laravel replace validation value not showing in validated() arrayLaravel 替换验证值未显示在验证()数组中
【发布时间】:2022-01-16 01:43:53
【问题描述】:

在我的刀片表单中,我有一个要求输入小时值的输入字段,比如说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

【问题讨论】:

  • 如果你想修改数据然后使用 $request->all().$request->validated() 从请求中获取经过验证的数据。
  • 我不建议修改 FormRequest 内的输入,因为您正在混淆代码。 FormRequest 的职责是验证数据,而不是转换数据。您可以使用中间件或您想要的任何其他层,但它会在它到达FormRequest 之前。为什么要验证该值,然后对其进行转换并将其提供给控制器?让控制器处理该转换,因为它应该是......

标签: php laravel laravel-validation


【解决方案1】:

来自 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
    );
}

如果你想重写 validated 方法:

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

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

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 1970-01-01
    • 2019-02-21
    • 2019-12-18
    • 2016-09-01
    • 2018-04-19
    • 2021-12-24
    • 2021-09-12
    • 2018-01-03
    相关资源
    最近更新 更多