В валидации Laravel 5.1 date_format допускается два формата

Я использую следующую проверку даты для входящего запроса POST.

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

Это позволит только дату такого рода, то есть 2012-01-21 15: 59: 44.8

Я также хочу разрешить дату без ВРЕМЕНИ, например 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.

Спасибо,

К

16

Решение

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

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

21

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector