2015-12-22 96 views
3

我不理解 '日期' 验证 - 函数返回字符串(由验证的var_dump()):不能解决与 '最大', '最小' 属性Yii2

['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

的验证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.'); 
    }} 
+1

非常好的主意 - 谢谢!我在这里发布最终代码 - 你的错误。 –

+0

谢谢@KirylLapchynski,我已经相应地修改了我的答案。你会好心接受答案吗? –

+0

1 @ JoeMiller - 当然是!你花时间给我。 –