Laravel 5.1在表单请求验证之前修改输入 [英] Laravel 5.1 Modify input before form request validation

查看:163
本文介绍了Laravel 5.1在表单请求验证之前修改输入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在验证之前,是否可以修改表单请求类中的输入字段?

Is there a way to modify input fields inside a form request class before the validation takes place?

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

I want to modify some input date fields as follows but it doesn't seem to work.

当我将$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时,输入请求值不会更改.

When I set $this->start_dt input field to 2016-02-06 12:00:00 and $this->end_dt to 2016-02-06 13:00:00 I still get validation error "end_dt must be after start_dt". Which means the input request values aren't getting changed when you update $this->start_dt and $this->end_dt inside the rules() function.

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_dtend_dt是日期选择器字段,而start_hrstart_min是下拉字段.因此,我需要通过组合所有字段来创建日期时间,以便进行比较.

Note: start_dt and end_dt are date picker fields and the start_hr, start_min are drop down fields. Hence I need to create a datetime by combining all the fields so that I can compare.

推荐答案

从laravel 5.4开始,您可以覆盖ValidatesWhenResolvedTraitprepareForValidation方法来修改任何输入. laravel 5.1应该有类似的可能.

As of laravel 5.4 you can override the prepareForValidation method of the ValidatesWhenResolvedTrait to modify any input. Something similar should be possible for 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 5.1在表单请求验证之前修改输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆