Laravel,Carbon和Validations

时间:2017-03-10 19:08:27

标签: php validation laravel-4 php-carbon

我在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>

Screenshot of error:

2 个答案:

答案 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的两行都这样做,它应该解决问题。