我想用多种格式检查我的请求日期时间,如下所示:
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 中做到这一点 请帮我!非常感谢!
最佳答案
您必须为此编写自定义验证格式。 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();
}
关于php - 如何在 laravel 中验证多种格式的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56352761/