2017-03-10 1 views
0

私はLaravel 4 &カーボンで奇妙な検証問題に遭遇しています。ラーベル、カーボン、およびバリデーション

私はいくつかの必要な一般的なフィールド(ドロップダウンとテキストフィールドの2つ)を持つフォームを持っていて、一連の日付は必要ではない&のフィールドです。

最初の3つのフィールドが必要で、date/timeフィールドが 'date_format:Y-m-d H:i'(ここでは秒ではありません)に設定されています。

下記の「airline_open」、「airline_close」、「hotel_open」、「hotel_close」の各フィールドが問題を引き起こすフィールドです。

必須のフィールドが入力されている限り、すべて正常に機能します。必要なフィールドが入力されておらず、日付/時刻フィールドが入力されていない場合は、適切なメッセージが表示されます。しかし、必要なフィールドのいずれかが記入されておらず、日付/時刻フィールドのいずれかが期待されるフォーマット(秒ではない)で埋められている場合、私はCarbonによって例外がスローされます。 (私は時間のために秒を含める場合興味深いことに、それは例外をスローしますが、検証エラーを与えていません。)

この例外は、この問題に似ているようだ:Laravel Carbon Data Missing

しかし、ことを考えます必要なフィールドが埋め尽くされている限り、すべてが設計どおりに動作します。私は、Carbonの日付フォーマットを混乱させることなくこの作業を行うことができるはずです。

アイデア?

いくつかのコードを追加:

バリ:フォーム(airline_open & airline_closeフィールド)から

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

。 「今」ボタンが希望の形式で日付&時間でフィールドを埋めるために、いくつかの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:

+0

コードを表示してください。 –

+0

また、フィールドの検証とフォーマットを変更して秒を含むように変更しても、フィールドの時刻から秒を削除すると、例外がスローされます。ガベージ(非日付/時刻のテキスト)を入力すると、予期したとおりに検証エラーが発生しますが、「不完全な」日付/時刻(たとえば、時間を削除して日付を残すなど)では例外がスローされます。 –

+0

正確なエラーを投稿してください。このエラーは、日付の保存ではなく、日付の検証と関係している可能性があります。 –

答えて

0

あなたが必要なDBで、このような日付を保存することはできませんので、検証が失敗していますそれを解析する。

私は最初の$の下でモデルに日付フィールドを置くことをお勧めしますが、変数

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

しかし、必要なフィールドにデータが入力されていれば、それは保存されます私のデータベースの細かい(秒は常に00に設定されています)。上記のコードを見て、私が日付の表示をどのように扱っているかを入力しながら追加しました。 –

+0

問題は検証とは関係ありません。私は適切なソリューションを投稿しました。 –

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') 

あなたはカーボンを使用する回線の両方のためにこれを行い、そして、それは問題を修正する必要がありますが、次の呼び出している

+0

ありがとう!それはそうするようだ! –