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