对于以下$规则,after:today
和after:start_date
按预期解决。但是,我不明白,它实际上是如何工作的但是...我检查了代码,但我无法弄明白。 Laravel在after:
到strtotime
之后发送值。 today
的预定义值是strtotime
吗?但是start_date
是我刚刚创建的数组中的一个键。这有什么作用?
public static $rules = array(
'name' => 'required',
'description' => '',
'location' => 'required|alpha-dash',
'cost' => 'numeric|min:0',
'min_age' => 'numeric|min:0',
'max_age' => 'numeric|min:0',
'start_date' => 'required|date|after:today',
'end_date' => 'required|date|after:start_date',
'start_time' => 'required|time',
'end_time' => 'required|time',
'registration_start_date' => 'date',
'registration_end_date' => 'date',
'max_attendees' => 'numeric|min:0'
);
答案 0 :(得分:1)
让我们从validateAfter
Illuminate\Validation\Validator
方法开始
protected function validateAfter($attribute, $value, $parameters)
{
// [unimportant code]
if ( ! ($date = strtotime($parameters[0])))
{
return strtotime($value) > strtotime($this->getValue($parameters[0]));
}
return strtotime($value) > $date;
}
首先,它将检查第一个参数是否是某种形式的日期。在您的情况下today
。如果不是,则会调用$this->getValue
并再次使用strtotime
。 getValue()
只是按名称返回属性的值:
protected function getValue($attribute)
{
if ( ! is_null($value = array_get($this->data, $attribute)))
{
return $value;
}
elseif ( ! is_null($value = array_get($this->files, $attribute)))
{
return $value;
}
}
注意,这也意味着strtotime
可以解释的任何参数都将被用作。因此,如果您有一个名为today
的属性,则不是该属性的值,而是strtotime('today')
将用于验证