web-dev-qa-db-ja.com

Laravel 5.1 date_format検証では2つの形式が許可されます

着信POSTリクエストに次の日付検証を使用します。

'trep_txn_date' => 'date_format:"Y-m-d H:i:s.u"'

これにより、この種の日付、つまり2012-01-21 15:59:44.8のみが許可されます

また、TIMEなしで日付を許可したい。 2012-01-21、mysql dbに送信されると、2012-01-21 00:00:00.0として自動的に保存されます

Laravelの既存の検証ルールを使用してこれを行う方法はありますか?以下のようなdate_formatルールで複数のフォーマットを定義する方法はありますか?.

'trep_txn_date' => 'date_format:"Y-m-d H:i:s.u","Y-m-d"' //btw this didn't work.

おかげで、

K

18
karmendra

date_formatバリデーターは、パラメーターとして1つの日付形式のみを取ります。複数の形式を使用できるようにするには、カスタム検証ルールを作成する必要があります。幸いなことに、それは非常に簡単です。

次のコードを使用して、AppServiceProviderで複数形式の日付検証を定義できます。

class AppServiceProvider extends ServiceProvider  
{
  public function boot()
  {
    Validator::extend('date_multi_format', function($attribute, $value, $formats) {
      // iterate through all formats
      foreach($formats as $format) {

        // parse date with current format
        $parsed = date_parse_from_format($format, $value);

        // if value matches given format return true=validation succeeded 
        if ($parsed['error_count'] === 0 && $parsed['warning_count'] === 0) {
          return true;
        }
      }

      // value did not match any of the provided formats, so return false=validation failed
      return false;
    });
  }
}

後でこのような新しい検証ルールを次のように使用できます。

'trep_txn_date' => 'date_multi_format:"Y-m-d H:i:s.u","Y-m-d"' 

カスタム検証ルールの作成方法について詳しくは、こちらをご覧ください: http://laravel.com/docs/5.1/validation#custom-validation-rules

25
jedrzej.kurylo