2

モデルには次の検証ルールがあります。

'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();
    }

しかし、年齢が13歳以上または同等であることを確認するためにstrtotimeに何を入れますか?

4

1 に答える 1

5

モデルにカスタム検証ルールを作成します。

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'
  )
)
于 2012-07-20T22:58:10.067 に答える