Validation Cakephp:根据从下拉列表中选择的选项验证输入字段
伙计们,我需要代码方面的帮助,我不知道怎么做。我有一个表格,学生选择一个考试主体,如果选择的考试主体是zimsec,那么分数应该是空的,如果考试主体是cambridge,那么分数不应该是空的,并且应该根据成绩选择一个范围。validMarks是我用来验证标记的函数,当我允许标记为空以便容纳Zimsec时,它停止工作 我的add.ctpValidation Cakephp:根据从下拉列表中选择的选项验证输入字段,validation,cakephp,cakephp-2.1,cakephp-model,Validation,Cakephp,Cakephp 2.1,Cakephp Model,伙计们,我需要代码方面的帮助,我不知道怎么做。我有一个表格,学生选择一个考试主体,如果选择的考试主体是zimsec,那么分数应该是空的,如果考试主体是cambridge,那么分数不应该是空的,并且应该根据成绩选择一个范围。validMarks是我用来验证标记的函数,当我允许标记为空以便容纳Zimsec时,它停止工作 我的add.ctp echo "<td>"; echo $this->Form->label('Mark(%): '); echo "</td>
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' => 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..
}
如果选择的考试主体为zimsec,则分数应为空,如果考试主体为cambridge,则分数不应为空,且应取一个范围
在这种情况下,应将验证分为两个功能:
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;
...
emptyIfZimsec
如果代码为ZIMSEC且标记不为空,将导致验证错误。而validMarks
将检查剑桥标记(如果是,则跳过)
这样,您还可以为每种情况输出单独的验证错误消息
希望这能有所帮助。ori非常感谢,不过我有一个小问题,我的代码运行得很好,但它只是验证数组中的第一项。不知道你是否能帮助尝试循环,但它仍然不能工作。
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;
...