如何在Laravel中以多种格式验证日期时间

时间:2019-05-29 03:36:06

标签: php laravel datetime

我想用多种格式检查我的请求日期时间:

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 个答案:

答案 0 :(得分:3)

您必须为此编写自定义验证格式。 Laravel的date_format只需要一个参数,并且不能处理多种格式。有两种添加自定义验证的方法。首先,一个是建立规则存储库,然后在其中添加您的验证逻辑。 Here泰勒·奥特威尔(Taylor Otwell)解释了这种方法。

另一种方法是在应用服务提供商中扩展验证并在其中添加新规则。将此代码添加到应用服务提供商中:

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();
}

答案 1 :(得分:0)

您可以在启动方法的文件 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,...'

可选,之后,您可以在resources / lang / en / validation.php中添加自定义消息

return [
   ...
   'several_date_format' => 'Error text'
   ...
]