有没有办法在验证发生之前修改表单请求类中的输入字段?
我想修改一些输入日期字段,如下所示,但它似乎不起作用.
当我将$this-> start_dt输入字段设置为2016-02-06 12:00:00和$this-> end_dt设置为2016-02-06 13:00:00我仍然会收到验证错误“end_dt必须在之后start_dt”.这意味着当您在rules()函数中更新$this-> start_dt和$this-> end_dt时,输入请求值不会更改.
- public function rules()
- {
- if ($this->start_dt){
- $this->start_dt = Carbon::createFromFormat('d M Y H:i:s',$this->start_dt . ' ' . $this->start_hr . ':'. $this->start_min . ':00');
- }
- if ($this->end_dt){
- $this->end_dt = Carbon::createFromFormat('d M Y H:i:s',$this->end_dt . ' ' . $this->end_hr . ':'. $this->end_min . ':00');
- }
- return [
- 'start_dt' => 'required|date|after:yesterday','end_dt' => 'required|date|after:start_dt|before:' . Carbon::parse($this->start_dt)->addDays(30)
- ];
- }
注意:start_dt和end_dt是日期选择器字段,start_hr,start_min是下拉字段.因此,我需要通过组合所有字段来创建日期时间,以便我可以进行比较.
从laravel 5.4开始,您可以覆盖ValidatesWhenResolvedTrait的prepareForValidation方法来修改任何输入. laravel 5.1应该有类似的东西.
您的请求中的示例
- /**
- * Modify the input values
- *
- * @return void
- */
- protected function prepareForValidation() {
- // get the input
- $input = array_map('trim',$this->all());
- // check newsletter
- if (!isset($input['newsletter'])) {
- $input['newsletter'] = false;
- }
- // replace old input with new input
- $this->replace($input);
- }