我必须在验证前更改日期格式。
我使用德国日期格式(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;
}
但是我怎么能在这里修改输入???
感谢您的帮助
答案 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