有没有办法在验证发生之前修改表单请求类中的输入字段?
我想修改一些输入日期字段,如下所示,但它似乎不起作用.
当我将$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); }