php - Laravel 5.2+ 日期前后日期验证不起作用

标签 php date laravel laravel-5 strtotime

这有效

'expected_at' => 'date|after:"2016-04-09 10:48:11"',

这有效
$rules['expected_at'] = 'date|after:'.$opportunity->created_at;

这不起作用
'expected_at' => 'date|after:created_at',

数据库中的“created_at”值正好如下
2016-04-09 10:48:11

请注意,表单将按以下格式将 expected_at 日期传递给验证器
2016-04-09

我认为这意味着您不能直接引用验证器中的模型字段?

最佳答案

在 5.3 的 laravel 文档中(我测试的版本):

Instead of passing a date string to be evaluated by strtotime, you may specify another field to compare against the date:

'finish_date' => 'required|date|after:start_date'


https://laravel.com/docs/5.3/validation#rule-after
“after”规则后面的字符串(在本例中为 start_date)不是数据库字段,而是传递给验证器的输入字符串的一部分。
因此,按照您在上面尝试执行的操作,验证器期望一个名为“created_at”的字段与您提交的其余输入一起传递,这可能不存在,因为您的意图是让它从您的模型中读取,这会导致它失败。
长话短说,你最后的说法是正确的。 “before/after”规则不引用模型字段,而是引用传递给验证器的其他输入字段,或者可以由“strtotime”解释的日期字符串

关于php - Laravel 5.2+ 日期前后日期验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36514379/

相关文章:

PHP/SQL - 使用 Select 元素显示/链接到数据库中的行

php - 如何将MySQL日期时间转换为ISO 8601日期格式而不带偏移量?

php - 将 8 位整数转换为 dd/mm/yyyy

PHP 将日期时间发送到 mysql

php - Laravel 插入数据库

php - 我正在通过现有项目跟踪代码,这一部分有什么作用?

php - fgets() 和 fread() - 有什么区别?

php - 在 CSS 中回显 PHP 变量

php - mySQL 搜索标签内的正则表达式

laravel - 从其他 Laravel 自动登录/验证 Laravel