Проверка даты и времени Laravel 5.1 позволяет использовать два формата

Я использую следующую проверку даты для входящего запроса 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.

Спасибо,

К

Ответ 1

Валидатор date_format принимает только один формат даты в качестве параметра. Чтобы иметь возможность использовать несколько форматов, вам нужно создать собственное правило проверки. К счастью, это довольно просто.

Вы можете определить многоформатную проверку даты в 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