2012-07-20 54 views
2

我在我的模型下面的驗證規則:CakePHP的:驗證用戶超過13年

'dob' => array(
      'required' => array(
       'rule' => array('notEmpty'), 
       'message' => 'Date of Birth is required' 
      ), 
      'age' => array(
       'rule' => array('comparison', '>=', 13), 
       'message' => 'You must be over 13 years old' 
      ) 
     ) 

我想要實現的是驗證用戶是年滿13歲...

日期創建像這樣:

<?php echo $this->Form->input('Profile.dob', array('label' => 'Date of Birth' 
             , 'dateFormat' => 'DMY' 
             , 'minYear' => date('Y') - 110 
             , 'maxYear' => date('Y') - 13)); ?> 

我怎麼做,但?由於保存的數據是一個日期而不是整數,所以我的比較將無法正常工作......在這裏尋找最簡單的解決方案,而無需在插件或其他外部資產上進行回覆,並儘可能使用一些簡單的代碼。

謝謝。

編輯:因此,基於該評論下面我說:

public function checkDOB($check) { 
     return strtotime($check['dob']) < strtotime(); 
    } 

但是我放在的strtotime檢查年齡大於或等於13?

+0

使用beforeSave方法在模型中,使用給定的DOB和當前日期的strtotime,減去電流給定,獲得的年數,檢查它是否大於13如果是,請保存。 – swiecki 2012-07-20 22:45:01

+1

或自定義驗證規則 – tigrang 2012-07-20 22:46:00

+1

是的,絕對是自定義驗證規則而不是beforeSave。這應該有所幫助。 http://stackoverflow.com/questions/11209968/cakephp-how-to-validate-my-dob-field-so-that-the-age-will-not-be-greater-than – swiecki 2012-07-20 22:46:36

回答

4

在模型中創建一個自定義的驗證規則:

public function checkOver13($check) { 
    $bday = strtotime($check['dob']); 
    if (time() < strtotime('+13 years', $bday)) return false; 
    return true; 
} 

它使用的strtotime一個實用的功能,讓你輕鬆做到在特定日期的日期計算。

使用規則:

'dob' => array(
    'age' => array(
    'rule' => 'checkOver13', 
    'message' => 'You must be over 13 years old' 
) 
) 
+0

使用規則我只是做:' '年齡'=>陣列( \t \t '規則'=> 'checkDOB', \t '消息'=> '您必須年滿13歲' \t)' – Cameron 2012-07-20 23:02:08