在 Laravel 请求中验证 Bootstrap 日期时间选择器
Posted
技术标签:
【中文标题】在 Laravel 请求中验证 Bootstrap 日期时间选择器【英文标题】:Validating Bootstrap date-time picker in Laravel request 【发布时间】:2018-04-30 00:33:12 【问题描述】:我正在使用 Bootstrap 日期时间选择器,我正在尝试验证控制器中的日期,但它总是给我一个错误,说格式不正确!。
但是我可以从请求数据创建一个新的 Carbon 日期对象,但我无法使用相同的格式验证请求对象。
这会引发一个错误,指出 from 与格式不匹配 d M Y - H:i
$request->validate([
'from' => 'date_format:"d M Y - H:i"|required|before:till',
'till' => 'date_format:"d M Y - H:i"|required|after:from'
]);
但是,如果我在没有任何验证的情况下使用数据,则此代码有效。
$ride->from = Carbon::createFromFormat('d M Y - H:i', $request->from)->toDateTimeString();
$ride->till = Carbon::createFromFormat('d M Y - H:i', $request->till)->toDateTimeString();
注意:
引导 dateTimePicker 有 format: "dd MM yyyy - hh:ii"
但我理解 javascript 格式不同于 php 格式。
这里出了什么问题?
编辑:这些是从转储请求对象获得的输入日期。
"from" => "16 November 2017 - 14:10"
"till" => "06 November 2017 - 12:00"
【问题讨论】:
显示传递给验证器的输入日期。 @LeszekRepie 添加,请查看编辑 用这种格式在php中显示日期时间并检查是否相同。您应该会看到“2017 年 11 月 15 日 - 15:40”(时间会有所不同) 【参考方案1】:因为使用before
和after
作为日期是去strtotime 来检查doc 中的检查
而16 Nov 2017 - 12:10
是无效日期检查not valid date 删除后还要检查-
valid date
所以我建议你这样转换
$from = str_replace("-","",$request->from);
$to = str_replace("-","",$request->to);
$request->validate([
'from' => 'date_format:"d M Y - H:i"|required|before:'.$to,
'till' => 'date_format:"d M Y - H:i"|required|after:'.$from
]);
【讨论】:
我尝试了您的解决方案,但仍然出现错误。The from does not match the format d M Y - H:i. The till does not match the format d M Y - H:i.
可能是till
我把to
用你的数据试试till
【参考方案2】:
说实话,您不需要注意日期格式。完全没有必要。我建议你这样做:
$fromDate = Carbon::parse($request->get('from'));
$toDate = Carbon::parse($request->get('to'));
现在上面将允许您比较以下条件的日期:
检查您是否已过了有效日期。 开始日期不应早于当前日期。 截止日期不应早于开始日期。然后你可以这样做:
if (($startDate === false) || ($toDate === false))
// return error
// Check start date is greater than to date
if ($startDate->gt($toDate))
// Check to date is not less than to date
if ($toDate->lt($toDate))
只要您以正确的格式传递日期,这就足够了。无需对日期格式进行验证。
【讨论】:
我知道我可以在验证方法之外做到这一点,但这违背了目的,我主要想检查before
和after
条件。验证提供了更好、更优雅的解决方案,而不是使用 if else 循环。
是的。但有时需要即时构建验证规则。以上是关于在 Laravel 请求中验证 Bootstrap 日期时间选择器的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel Collective、Bootstrap 模型和 JavaScript 的客户端表单验证和路由?
在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则