验证前更改日期格式

时间:2016-09-25 16:52:17

标签: laravel

我必须在验证前更改日期格式。

我使用德国日期格式(dd.mm.yyyy)。但是对于验证我需要格式yyyy-mm-dd。

这里是我的请求文件中的规则:

public function rules()
    {
        return [
            'title'     => 'required|min:5',
            'start'     => 'required|date_format:d.m.Y|after:+1 week|unique:talks,start',
            'end'       => 'required|date_format:d.m.Y|after:start|unique:talks,end',
            'interval'  => 'required'
        ];
    }

现在我找到了这个功能:

public function all()
    {
        $input = parent::all();

        //modify input here

        return $input;
    }

但是我怎么能在这里修改输入???

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

$input变量只是一个带键的关联数组 - >请求输入的值对。您可以直接修改数组:

public function all()
    {
        $input = parent::all();

        $input['start'] = date("Y-m-d", strtotime($input['start']));
        $input['end'] = date("Y-m-d", strtotime($input['end']));

        return $input;
    }

这将转换您的日期值以进行验证。因为验证器调用all()方法。

但是,这不会修改输入中的原始值。

每当您使用与all()不同的方法访问输入值时,将显示原始值。例如。 $request->input('start')会为您提供原始的德语格式,但$request->all()['start']会为您提供已翻译的国际正式格式。

这种情况是潜在的漏洞来源,难以维护。解决问题的正确方法是编写一个微小的自定义中间件来修改请求值。见这里:https://laracasts.com/discuss/channels/general-discussion/laravel-5-modify-input-before-validation?page=2