如何在cakephp中验证同一字段的多个条目
任何主体都知道如何验证同一字段的多个条目吗。我需要验证数据并将其保存到DB表中。我尝试使用通常用于验证数据的验证规则方法,但验证函数返回1,即True而不是error。另外,我在一个额外的数组中包含了验证规则,因为它不起作用 请指导我验证多个条目的数据 控制器代码如何在cakephp中验证同一字段的多个条目,php,validation,cakephp,model,Php,Validation,Cakephp,Model,任何主体都知道如何验证同一字段的多个条目吗。我需要验证数据并将其保存到DB表中。我尝试使用通常用于验证数据的验证规则方法,但验证函数返回1,即True而不是error。另外,我在一个额外的数组中包含了验证规则,因为它不起作用 请指导我验证多个条目的数据 控制器代码 $this->MyModel->set($this->request->data); if($this->MyModel->validates()){ //Some code }else{
$this->MyModel->set($this->request->data);
if($this->MyModel->validates()){
//Some code
}else{
pr($this->MyModel->validationErrors);
}
提交表格的输出:
Array
(
[MyModel] => Array
(
[0] => Array
(
[qualification_id] =>
[stream] =>
[pass_year] =>
[description] =>
[resume_id] => 1
)
[1] => Array
(
[qualification_id] =>
[stream] =>
[pass_year] =>
[description] =>
[resume_id] => 1
)
)
)
MyModel验证规则:
public $validate = array(
array(
'resume_id' => array(
'notEmpty'=>array(
'rule' => 'notEmpty',
'message' => 'Invalid resume reference.'
),
'numeric' => array(
'rule' => 'numeric',
'message' => 'Invalid resume reference.'
)
),
'qualification_id' => array(
'notEmpty'=>array(
'rule' => 'notEmpty',
'message' => 'Please enter qualification.'
),
'numeric' => array(
'rule' => 'numeric',
'message' => 'Invalide qualification selected'
)
)
)
);
谢谢
第C.段Model::validates()
只能处理以前使用Model::set()
设置的单个记录
如果希望验证多个记录,则必须使用Model::validateMany()
它可以实施为:
$data = $this->request->data; //to prevent $this->request->data from being altered.
if($validationErrors=$this->MyModel->validateMany($data)){
//Some code
}else{
pr($validationErrors);
}
请参见CakePHP 2.x API。我找到了解决方案,正如Inigo Flores所说的
Model::validateMany()
是完整的帮助,但在我的例子中Model::validateMany()
不起作用。所以我在我的模型中重写了这个方法
型号代码:
public function validateMany(&$data, $options = array()) {
$validationErrors = array();
foreach ($data[$this->alias] as $key => $values) {
$this->set($values);
if (!$this->validates($values)) {
$validationErrors[$this->alias][$key] = $this->validationErrors;
foreach ($this->validationErrors as $field => $msg) {
$validationErrors[$this->alias][$key][$field]['message'] = $msg[0];
}
}
}
if (!empty($validationErrors)) {
unset($this->validationErrors);
$this->validationErrors = $validationErrors;
return false;
} else {
return true;
}
}
我使用cakephp的$this->validates()
方法来验证每个数组
每个表单字段的CTP代码:
<?php
$isError = false;
if (!empty($errors['MyModel'][$index]['qualification_id']['message'])) {
$isError = true;
}
?>
<div class="col-lg-4<?php echo ($isError) ? ' error' : ''; ?>">
<?php
echo $this->Form->label(_('Qualification'));
echo $this->Form->select('MyModel.' . $index . '.qualification_id', $qualifications, array('div' => false, 'required' => false, 'empty' => 'Please select', 'class' => 'form-control', 'maxlength' => 80));
echo ($isError) ? '<span>' . $errors['MyModel'][$index]['qualification_id']['message'] . '</span>' : '';
?>
</div>
感谢Inigo,我尝试了这个模型::validateMany(),但它没有验证我的数据。所以我重写了Model::validateMany()。我会在这篇文章中更新我的答案。谢谢伊尼戈。这个答案在同样的情况下对我有帮助。