CakePHP 1.3验证错误未使用数字索引数组显示
我已经看了很多关于验证错误没有显示的论坛,并尝试了各种方法,但都没有用 基本上,验证是正确识别字段没有值,但错误消息不会“自动”显示在输入框下方 模型验证规则如下所示:CakePHP 1.3验证错误未使用数字索引数组显示,php,validation,cakephp,cakephp-1.3,cakephp-model,Php,Validation,Cakephp,Cakephp 1.3,Cakephp Model,我已经看了很多关于验证错误没有显示的论坛,并尝试了各种方法,但都没有用 基本上,验证是正确识别字段没有值,但错误消息不会“自动”显示在输入框下方 模型验证规则如下所示: var $validate = array( 'description' => array( 'rule' => 'notEmpty', 'required' => true, 'allowEmpty' => false, 'mess
var $validate = array(
'description' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Please enter a description of the change'
)
);
Array
(
[Change] => Array
(
[0] => Array
(
[id] => 3237
[cn_id] => 5132
[req_id] => 25
[description] =>
)
[1] => Array
(
[id] => 3238
[cn_id] => 5132
[req_id] => 22
[description] =>
)
[2] => Array
(
[id] => 3239
[cn_id] => 5132
[req_id] => 4
[description] =>
)
)
Array
(
[0] => Array
(
[description] => Please enter a description of the change
)
[1] => Array
(
[description] => Please enter a description of the change
)
[2] => Array
(
[description] => Please enter a description of the change
)
[description] => Please enter a description of the change
)
echo pr($this->data);输出如下所示:
var $validate = array(
'description' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Please enter a description of the change'
)
);
Array
(
[Change] => Array
(
[0] => Array
(
[id] => 3237
[cn_id] => 5132
[req_id] => 25
[description] =>
)
[1] => Array
(
[id] => 3238
[cn_id] => 5132
[req_id] => 22
[description] =>
)
[2] => Array
(
[id] => 3239
[cn_id] => 5132
[req_id] => 4
[description] =>
)
)
Array
(
[0] => Array
(
[description] => Please enter a description of the change
)
[1] => Array
(
[description] => Please enter a description of the change
)
[2] => Array
(
[description] => Please enter a description of the change
)
[description] => Please enter a description of the change
)
)
echo pr($this->Change->invalidFields());输出如下所示:
var $validate = array(
'description' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Please enter a description of the change'
)
);
Array
(
[Change] => Array
(
[0] => Array
(
[id] => 3237
[cn_id] => 5132
[req_id] => 25
[description] =>
)
[1] => Array
(
[id] => 3238
[cn_id] => 5132
[req_id] => 22
[description] =>
)
[2] => Array
(
[id] => 3239
[cn_id] => 5132
[req_id] => 4
[description] =>
)
)
Array
(
[0] => Array
(
[description] => Please enter a description of the change
)
[1] => Array
(
[description] => Please enter a description of the change
)
[2] => Array
(
[description] => Please enter a description of the change
)
[description] => Please enter a description of the change
)
因此,它会生成错误消息以供显示,但它们实际上不会显示在视图中,我不知道为什么
“查看”代码摘录如下:
<?php echo $form->input('Change.'.$i.'.description',
array('value' => $cn['Change'][$i]['description'],
'label' => $engReq['Req']['description'])); ?>
有人知道为什么没有显示错误消息吗?应该是吗
var $validate = array(
'description' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Please enter a description of the change'
)
)
);
?我在hasMany模型(表单中有数字索引字段)中遇到了同样的问题,并提出了一个对我有效的验证解决方案 快速回答:在尝试实际保存数据之前,我分别验证了数据,如(注意“validate”=>“only”): 这样做会在表单中给我模型的验证错误消息,就在验证失败的输入字段下面(显示验证错误的正常方式)
注意:我无法使用saveAll()来实际保存数据(稍后我将解释原因)。如果我可以使用saveAll()来实际保存数据,那么我可以在保存数据的同时使用(注意“validate'=>“first”)进行验证: 但是,我无法使用saveAll()实际保存数据,因为我需要使用一个事务同时保存多个模型,其中一些模型与其他模型没有直接关系。saveAll()只保存调用它的模型,以及与它直接相关的模型。由于Cake当前不支持嵌套事务,并且saveAll()自动使用一个事务,因此我必须在模型上使用save(),并手动启动和结束事务。但是,这导致我在hasMany项目上丢失了表单中的验证消息,即使我使用“$this->ModelName->save($this->data,array('validate'=>'first')”进行保存
进一步解释:问题似乎与在表单中使用数字索引字段有关。例如:
$this->Form->input("ModelName.0.field_name");
此索引方案似乎是处理表单中许多项的正确方法,但验证消息无法找到此表单输入。有趣的是,我的视图实际上可以访问验证错误。这可以通过使用在视图中看到(注意,这些行中没有数字索引):
将这些行放在“$this->Form->input(“ModelName.0.field_name”)”之后,将验证消息插入到页面中,只是与输入字段不在同一个div中(因此它看起来并不理想)
我想不出一种方法来告诉Cake在“$this->Form->input”(“ModelName.0.field_name”)”中使用该验证消息。因此我求助于前面描述的“validate”=>“only”方法,这对我来说很好。OP的数组应该(并且确实如此)工作时,该字段只有一个验证规则。虽然
'notEmpty'
键是完全可选的(且是任意的),;)但您的数组是一个字段具有多个规则时使用的常见且正确的格式。尽管如此,您还是尝试了数组选项,但它仍然没有在表单上显示错误消息|不确定,但验证问题似乎特别与使用Model::saveAll()
有关,如果这样有帮助的话。。