我在Laravel 4&amp ;;中遇到了一个奇怪的验证问题。碳
我有一个表单在顶部有一些必需的常规字段(几个下拉菜单和一个文本字段),然后是一系列日期&时间字段不是必需的。
我有一个验证器设置为需要前3个字段,日期/时间字段设置为'date_format:Y-m-d H:i'(这里的秒数不重要)。
下面的“airline_open”,“airline_close”,“hotel_open”,“hotel_close”字段是造成问题的字段。
只要填写了必填字段,一切都很有效。如果没有填写必填字段,并且没有填写日期/时间字段,那也很棒(我得到适当的消息)。但是,如果没有填写任何必填字段,并且任何日期/时间字段都填入了预期的格式(没有秒数),我会得到Carbon抛出的异常。 (有趣的是,如果我包含时间的秒数,它不会抛出异常,但会给出验证错误。)
此异常似乎与此问题类似:Laravel Carbon Data Missing
然而,只要填写了必填字段,一切都按设计工作,感觉我应该能够完成这项工作,而不必使用Carbon的日期格式。
有什么想法吗?
添加一些代码:
验证
'direction' => 'required',
'type' => 'required',
'notes' => 'required',
'callback_time' => 'date_format:H:i',
'callback_time2' => 'required_if:callback_type, 4|date_format:H:i',
'airline_open' => 'date_format:Y-m-d H:i',
'airline_close' => 'date_format:Y-m-d H:i',
'hotel_open' => 'date_format:Y-m-d H:i',
'hotel_close' => 'date_format:Y-m-d H:i'
);
从表单(airline_open& airline_close字段)。 “现在”按钮调用一些js来填充日期&时间格式:
<tr class="airline-reservation @if ($data->airline_reservation == 0) _hide @endif">
<td width="25%">{{ trans('nationalbank.call.form.open') }}:</td>
<td width="25%">
<input type="text" class="form-control" name="airline_open" id="airline_open" @if ($data->airline_open > 0)) value="{{ Carbon\Carbon::createFromFormat('Y-m-d H:i:s',$data->airline_open)->format('Y-m-d H:i') }}" @endif size="30">
<a href="javascript:;" class="btn btn-info btn-xs nowbtn" id="now-airline_open">now</a>
</td>
<td width="25%">{{ trans('nationalbank.call.form.close') }}:</td>
<td width="25%">
<input type="text" class="form-control" name="airline_close" id="airline_close" @if ($data->airline_close > 0)) value="{{ Carbon\Carbon::createFromFormat('Y-m-d H:i:s',$data->airline_close)->format('Y-m-d H:i') }}" @endif size="30">
<a href="javascript:;" class="btn btn-info btn-xs nowbtn" id="now-airline_close">now</a>
</td>
</tr>
答案 0 :(得分:0)
验证失败,因为您无法在需要解析的DB中保存此日期。
我建议先在$ date变量
下的模型中添加日期字段protected $dates = ['your_date'];
然后制作一个setter和getter:
// save the date in UTC format in DB table
public function setYourDateAttribute($date)
{
$this->attributes['your_date'] = Carbon::parse($date);
}
// convert the UTC format to my format
public function getYourDateAttribute()
{
return Carbon::parse($this->attributes['your_date'])->format('d.m.Y H:i');
}
答案 1 :(得分:0)
错误与视图form.blade.php
中的代码有关。
您要拨打以下电话:
Carbon\Carbon::createFromFormat('Y-m-d H:i:s',$data->airline_open)->format('Y-m-d H:i')
将其更改为:
(new Carbon\Carbon($data->airline_open))->format('Y-m-d H:i')
对于使用Carbon的两行都这样做,它应该解决问题。