Php Laravel、Carbon和Validations

Php Laravel、Carbon和Validations,php,validation,laravel-4,php-carbon,Php,Validation,Laravel 4,Php Carbon,我在Laravel 4和Carbon中遇到了一个奇怪的验证问题 我有一个表单,上面有一些必需的常规字段(几个下拉列表和一个文本字段),然后是一系列不需要的日期和时间字段 我设置了一个验证器,将前3个字段设置为必需的,并且将日期/时间字段设置为“日期\格式:Y-m-d H:I”(此处秒数不重要) 下面的“航空公司开放”、“航空公司关闭”、“酒店开放”、“酒店关闭”字段是导致问题的字段 只要填写了所需的字段,一切都很顺利。如果必填字段没有填写,并且没有填写日期/时间字段,也很好(我收到了适当的消息)

我在Laravel 4和Carbon中遇到了一个奇怪的验证问题

我有一个表单,上面有一些必需的常规字段(几个下拉列表和一个文本字段),然后是一系列不需要的日期和时间字段

我设置了一个验证器,将前3个字段设置为必需的,并且将日期/时间字段设置为“日期\格式:Y-m-d H:I”(此处秒数不重要)

下面的“航空公司开放”、“航空公司关闭”、“酒店开放”、“酒店关闭”字段是导致问题的字段

只要填写了所需的字段,一切都很顺利。如果必填字段没有填写,并且没有填写日期/时间字段,也很好(我收到了适当的消息)。但是,如果没有填写任何必填字段,并且任何日期/时间字段都使用了预期的格式(无秒),我会收到Carbon抛出的异常。(有趣的是,如果我包含时间的秒数,它不会抛出异常,而是给出验证错误。)

此异常似乎与此问题类似:

然而,考虑到只要填写了所需的字段,一切都按设计进行,我觉得我应该能够完成这项工作,而不必乱弄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'
    );
从表单(航空公司打开和航空公司关闭字段)。“now”按钮调用一些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>

{{trans('nationalbank.call.form.open')}:
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”>
{{trans('nationalbank.call.form.close')}:
airline\u close>0)value=“{{Carbon\Carbon::createFromFormat('Y-m-d H:i:s',$data->airline\u close)->format('Y-m-d H:i')}”@endif size=“30”>

验证失败,因为您无法将该日期保存在需要解析的数据库中

我建议首先将模型中的日期字段放在$dates变量下

protected $dates = ['your_date'];
然后做一个二传手和接球手:

// 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');
}

验证失败,因为您无法将该日期保存在需要解析的数据库中

我建议首先将模型中的日期字段放在$dates变量下

protected $dates = ['your_date'];
然后做一个二传手和接球手:

// 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');
}

该错误与视图
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的两行都这样做,应该可以解决问题。

错误与视图中的代码有关
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的两行执行此操作,应该可以解决问题。

显示一些代码。此外,如果我更改字段验证和格式以包含秒数,但从字段中的时间中删除秒数,仍然会引发异常。如果我输入垃圾(非日期/时间文本),我会收到预期的验证错误,但“不完整”的日期/时间(例如,删除时间并只留下日期)会引发异常。请发布您收到的确切错误。错误可能与保存日期有关,而不是验证日期。我附上了上面错误的屏幕截图。消息是“数据丢失(视图:/var/www/novus-calltracker-2/app/modules/nationalbank/views/call/form.blade.php)”显示一些代码。此外,如果我更改字段验证和格式以包含秒数,但从字段中删除秒数,我仍然会引发异常。如果我输入垃圾(非日期/时间文本),我会收到预期的验证错误,但“不完整”的日期/时间(例如,删除时间并只留下日期)会引发异常。请发布您收到的确切错误。错误可能与保存日期有关,而不是验证日期。我附上了上面错误的屏幕截图。消息是“数据丢失(视图:/var/www/novus-calltracker-2/app/modules/nationalbank/views/call/form.blade.php)”,但如果我填充了必需的字段,它会很好地保存在数据库中(秒数始终设置为00)。请参阅上面我在键入时添加的代码,了解我如何处理日期显示。问题与验证无关。我已经发布了一个合适的解决方案。但是如果我填充了必需的字段,它会很好地保存在我的数据库中(秒总是设置为00)。请参阅上面我在键入时添加的代码,了解我如何处理日期显示。问题与验证无关。我已经发布了一个合适的解决方案。谢谢!这似乎可以做到!非常感谢。这似乎可以做到!