用'max','min'属性Yii2无法解决'date'验证问题

时间:2015-12-22 00:43:51

标签: yii2

我无法理解 - 函数返回字符串(由var_dump()验证):

['userBirthDate', 'date', 'format' => 'yyyy-MM-dd', 
'max' => function() {
    $date = new DateTime();
    date_sub($date, date_interval_create_from_date_string('12 years'));
    $maxDate = date_format($date, 'Y-m-d');
    return $maxDate;
},
'min' => function() {
    $date = new DateTime();
    date_sub($date, date_interval_create_from_date_string('100 years'));
    $minDate = date_format($date, 'Y-m-d');
    return $minDate;
}

],

但我错了: “类Closure的对象无法转换为字符串”。

mistake code

1 个答案:

答案 0 :(得分:1)

验证程序maxmin只能接受一个数字,而不是匿名函数,这就是您收到错误的原因。

尝试使用此代码,该代码会创建一个名为validateUserBirthDate的新验证程序,并使用现有的date验证程序。

[
    ['userBirthDate'], 
    'validateUserBirthDate'
],
[
    ['userBirthDate'],
    'date', 'format' =>  'format' => 'yyyy-MM-dd'
]

然后在你的模型中添加一个自定义验证器;

public function validateUserBirthDate($attribute, $params) {
$date = new \DateTime();
date_sub($date, date_interval_create_from_date_string('12 years'));
$minAgeDate = date_format($date, 'Y-m-d');
date_sub($date, date_interval_create_from_date_string('100 years'));
$maxAgeDate = date_format($date, 'Y-m-d');
    if ($this->$attribute > $minAgeDate) {
        $this->addError($attribute, 'Date is too small.');
    } elseif ($this->$attribute < $maxAgeDate) {
        $this->addError($attribute, 'Date is to big.');
    }}