Как проверить дату и время в формате laravel - PullRequest
2 голосов
/ 29 мая 2019

Я хочу проверить дату и время моего запроса во многих форматах, как показано ниже:

Y-m-d
Y-m-
Y-m

В Laravel я использую Validator для проверки даты и времени, но Validator не может выполнять проверку со многими форматами. Это мой код:

Validator::make(['date' => $departureDate], [
   'date' => 'required|date_format:Y-m-d, Y-m, Y-m-'
]);

Как я могу сделать это в Laravel Пожалуйста, помогите мне! Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 29 мая 2019

Вы должны написать собственный формат проверки для этого.Date_format от Laravel ожидает только один параметр и не способен обрабатывать несколько форматов.Есть два способа добавить пользовательскую проверку.во-первых, создайте хранилище правил и добавьте туда свою логику проверки. Здесь Тейлор Отвелл объяснил этот метод.

Другой способ сделать это - продлить валидацию в сервис-провайдере приложения и добавить туда новое правило.добавьте этот код в сервис-провайдер приложения:

use Illuminate\Support\Facades\Validator;


Validator::extend('multi_date_format', function ($attribute, $value, $parameters,$validator) {

    $ok = true;

    $result = [];

      // iterate through all formats
      foreach ($parameters as $parameter){

         //validate with laravels standard date format validation
         $result[] = $validator->validateDateFormat($attribute,$value,[$parameter]);
      }

    //if none of result array is true. it sets ok to false
    if(!in_array(true,$result)){
        $ok = false;
        $validator->setCustomMessages(['multi_date_format' => 'The format must be one of Y-m-d ,Y-m or Y-m-']);
    }

    return $ok;
});

И здесь вы можете использовать его следующим образом:

$validator = Validator::make(['date' => '2000-02-01'], [
    'date' => 'required|multi_date_format:Y-m-d,Y-m,Y-m-'
]);

if($validator->fails()) {
    $errors = $validator->errors()->all();
}
0 голосов
/ 29 мая 2019

Вы можете зарегистрировать пользовательский валидатор в файле app / Providers / AppServiceProvider.php в методе загрузки.

Validator::extend('several_date_format', function ($attribute, $value, $parameters,$validator) {
    foreach ($parameters as $parameter){
        if (!$validator->validateDateFormat($attribute,$value,[$parameter]))
           return false;
    }
    return true;
});

Теперь вы можете использовать его

'your_date' => 'required|several_date_format:Y-m-d,...'

Необязательно после этого вы можете добавить свое сообщение в ресурсах / lang / en / validation.php

return [
   ...
   'several_date_format' => 'Error text'
   ...
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...