Я использую следующую проверку даты для входящего запроса POST.
'trep_txn_date' => 'date_format:"Ymd H:i:su"'
Это позволит только дату такого типа, т.е. 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:"Ymd H:i:su","Ymd"' //btw this didn't work.
Благодаря,
К
Валидатор 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:"Ymd H:i:su","Ymd"'
Подробнее о том, как создавать пользовательские правила проверки, читайте здесь: http://laravel.com/docs/5.1/validation#custom-validation-rules