Cakephp:根据从下拉列表中选择的选项验证输入字段

时间:2012-07-03 10:59:43

标签: validation cakephp cakephp-2.1 cakephp-appmodel

嗨伙计我需要帮助我的代码我不知道该怎么做。我有一个表格,学生选择考试机构,如果选择的考试机构是zimsec标记应该是空的,如果考试机构是剑桥标记不应该是空的,应根据等级取一个范围。 validMarks是我用来验证标记的函数,当我允许标记为空时它停止工作以容纳Zimsec。

我的add.ctp

echo "<td>"; 
echo $this->Form->label('Mark(%): ');
echo "</td><td>";   
echo $this->Form->input("ApplicantOlevelQualification.mark.$s",array('label'=>''));
echo "</td></tr>";
echo $this->Form->label('Exam Body<font color=red>*</font>');
$exambody=array(
    'ZIMSEC'=>'ZIMSEC',
    'CAMBRIDGE'=>'CAMBRIDGE'
);
echo $this->Form->select('exam_body_code',$exambody,array('empty'=>'Please Select','selected'=>false,'label'=>'Exam Body<font color="red">*</font>'));

我的控制器

$exam_body_code = $this->data['ApplicantOlevelQualification']['exam_body_code'];
'mark' => $this->data['ApplicantOlevelQualification']['mark'][$i],

我的模特

'exam_body_code' => array(
    'notempty' => array(
        'rule' => array('notempty'),
    ),
),
'mark' => array(
    //'numeric' => array(
    //'rule' => array('numeric'),
    'rule' => array('validMarks'),
        'message' => 'Wrong mark for this grade, please try again.',
        'allowEmpty' => true,
    //  ),
),

public function validMarks($check) {
    $grade=($this->data['ApplicantOlevelQualification']['grade']);
    $mark=($this->data['ApplicantOlevelQualification']['mark']);
    //var_dump($mark);
    if($grade== 'A' && $mark>74) {
        // $this->validationError( 'grade', 'Grade A must be greater than or equal to 75%' );
        //Access $this->data and $check to compare your marks and grade;
        return true;
    } elseif( ($grade)== 'B' && ($mark>64)) {
        return true;   
    } elseif( ($grade)== 'C' && ($mark)>50) {
        return true;   
    } elseif( ($grade)== 'D' && ($mark)>40) {
        return true;   
    } elseif( ($grade)== 'E' && ($mark)>30) {
        return true;   
    } elseif( ($grade)== 'U' && ($mark)>0) {
        return true;   
    } else {
        return false;
    }

    //Access $this->data and $check to compare your marks and grade..
 }

1 个答案:

答案 0 :(得分:1)

  

如果选择的考试机构是zimsec标记应该是空的,如果考试机构是剑桥标记不应该是空的,应该采取范围......

在这种情况下,您应该将验证分为两个功能:

function emptyIfZimsec($data) {
    return $this->data['ApplicantOlevelQualification']['exam_body_code'] != 'ZIMSEC'
        || empty($this->data['ApplicantOlevelQualification']['mark']);
}

function validMarks($data) {
    if ($this->data['ApplicantOlevelQualification']['exam_body_code'] != 'CAMBRIDGE')
        return true;

    ...
如果代码是ZIMSEC且标记不为空,则

emptyIfZimsec将导致验证错误。并且validMarks将检查CAMBRIDGE标记(如果是ZIMSEC则跳过)

通过这种方式,您还可以为每种情况输出单独的验证错误消息。

希望这有帮助。

相关问题