Cakephp:如何验证一个数组以确保它至少有五个或更多项目
Posted
技术标签:
【中文标题】Cakephp:如何验证一个数组以确保它至少有五个或更多项目【英文标题】:Cakephp: How to validate an array to make sure that it has at least five items or more 【发布时间】:2012-06-29 06:32:38 【问题描述】:大家好,我的代码需要帮助。我有一个表格,学生可以在其中选择他们获得的科目、分数和成绩。科目和成绩是一个下拉菜单,它们处于循环中。我希望学生至少输入五门科目,包括英语。每个主题都由一个主题代码引用。保存一组学生详细信息。你能帮我做这件事吗?
我的控制器功能如下
public function add($app_id = null)
if($app_id != null)
if ($this->request->is('post'))
//saving the data in variables
$applicant_id = $this->data ['ApplicantOlevelQualification']['applicants_detail_id'];
$centre_number = $this->data['ApplicantOlevelQualification']['centre_number'];
$candidate_number = $this->data['ApplicantOlevelQualification']['candidate_number'];
$exam_body_code = $this->data['ApplicantOlevelQualification']['exam_body_code'];
$year_written = $this->data['ApplicantOlevelQualification']['year_written'];
$sittings=$this->request->data['ApplicantOlevelQualification']['number_of_sittings'];
// debug($sittings);die();
for ($i = 1; $i < sizeof($this->data['ApplicantOlevelQualification']['olevel_subject_code']); $i++)
if ($this->data['ApplicantOlevelQualification']['olevel_subject_code'][$i] != "")
$this->ApplicantOlevelQualification->create();
$this->ApplicantOlevelQualification->id = null;
$this->ApplicantOlevelQualification->set(array(
'applicants_detail_id' => $app_id,
'olevel_subject_code' => $this->data['ApplicantOlevelQualification']['olevel_subject_code'][$i],
'grade' => $this->data['ApplicantOlevelQualification']['grade'][$i],
'centre_number'=> $centre_number,
'candidate_number'=> $candidate_number,
'exam_body_code'=> $exam_body_code,
'year_written'=> $year_written,
)
);
//$appeng = $this->ApplicantOlevelQualification->find('list',array('fields'=> array('olevel_subject_code','grade'), 'conditions'=>array('ApplicantOlevelQualification.olevel_subject_code'=>'8900',)));
//debug(($this->data->ApplicantOlevelQualification);die();
/* if($appeng !="8900")
$this->Session->setFlash(__('English is a prerequisite for application to procceed'));
$this->redirect(array('action' => 'add',$app_id));
*/
if ($this->ApplicantOlevelQualification->save())
$this->Session->setFlash(__('Your O\'level Qualifications have been saved'));
else
$this->Session->setFlash(__('Your O\'level Qualifications failed to save.'));
我的模型如下
public $validate = array(
'grade' => array(
'notempty ddd' => array(
'rule' => array('notempty'),
//'rule' => '/^[A-Z]1$/i',
'message' => 'Enter a valid grade, in capital letters!',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
'olevel_subject_code' => array(
'numeric' => array(
'rule' => array('numeric'),
//'message' => 'Your custom message here',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
);
目前,此代码捕获科目和成绩以及详细信息,而不检查学生是否输入了所需的最少 5 门科目及其成绩。如果可以,请你帮助我。谢谢你。
【问题讨论】:
【参考方案1】:您应该编写自己的custom validation rule(s)。为此,请将其添加到 $validate
:
public $validate = array(
'grade' => array(
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Enter a valid grade, in capital letters!',
),
'mycustomrule' => array(
'rule' => array('mycustomgraderule'),
'message' => 'One or more of your subjects do not have grades'
)
),
'olevel_subject_code' => array(
'numeric' => array(
'rule' => array('numeric'),
),
),
);
其中mycustomgraderule
实际上是同一模型中的另一个方法:
public function mycustomgraderule($check)
// Your logic here
当检查验证通过时,此方法应返回TRUE
,否则应返回FALSE
。
您可以对olevel_subject_code
执行相同的操作,但是如果您希望验证至少输入 5 个科目,以便每个科目都有一个输入的成绩,我建议您创建一个
两者的方法,并将其作为自定义验证规则放在'olevel_subject_code'
中的$validate
中。 $check 参数保存正在验证的字段的数据。在这个(以及每个)自定义规则中,您可以使用模型的 $this->data
属性,该属性包含所有当前模型数据。
【讨论】:
谢谢 Borislav Sabev。正如您在上面告诉我的那样,我已经使用了该功能,但我面临一个挑战,即当我输入错误的标记时,该功能不再被识别,它根本无法验证。我也想包括一个范围,但它给了我错误。你能帮助我吗。我希望 A 只接受 75-100 的分数我什至也试过这个,但它不起作用,不知道你是否能帮忙。 if($grade== 'A' && 74 基本上你的函数应该检查不同的条件并且(如解释的那样)如果IT ALL VALIDATES返回true。因此,如果您希望通过这么多标准进行验证,您的函数应该检查是否同时满足所有标准。我们可以尝试提供帮助,但我们需要验证方法的完整源代码。 我的源代码对于所需的字符集来说太大了。我怎样才能给你我的源代码?以上是关于Cakephp:如何验证一个数组以确保它至少有五个或更多项目的主要内容,如果未能解决你的问题,请参考以下文章