2015-12-22 94 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 - 當然是!你花時間給我。 –