php – Laravel 5.1在表单请求验证之前修改输入

前端之家收集整理的这篇文章主要介绍了php – Laravel 5.1在表单请求验证之前修改输入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在验证发生之前修改表单请求类中的输入字段?

我想修改一些输入日期字段,如下所示,但它似乎不起作用.

当我将$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);
}

猜你在找的Laravel相关文章