$rules 如何解析日期变量值
How are $rules resolved for date variable values
对于以下 $rules,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'
);
让我们从Illuminate\Validation\Validator
中的validateAfter
方法开始
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()
只是 returns 属性的名称的值:
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')
而不是属性的值来进行验证
对于以下 $rules,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'
);
让我们从Illuminate\Validation\Validator
validateAfter
方法开始
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()
只是 returns 属性的名称的值:
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')
而不是属性的值来进行验证