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()
有关,如果这样有帮助的话。。