【问题标题】:How to validate date time with many format in laravel如何在 laravel 中使用多种格式验证日期时间
【发布时间】:2019-05-29 03:36:06
【问题描述】:

我想检查我的请求日期时间,格式如下:

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 中做到这一点 请帮我!非常感谢!

【问题讨论】:

标签: php laravel datetime


【解决方案1】:

您必须为此编写自定义验证格式。 Laravel 的 date_format 只需要一个参数,不能处理多种格式。有两种方法可以添加自定义验证。首先,一个是创建一个规则存储库并在那里添加您的验证逻辑。 HereTaylor 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();
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我看到你错过了一些东西。您如何看待失败案例在数组 $parameters 中的第一个位置
    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2018-10-21
    • 2018-04-25
    • 2018-08-01
    相关资源
    最近更新 更多