Cakephp表单验证空索引

时间:2014-06-10 15:06:22

标签: validation cakephp

好吧,简而言之,我试图验证一个表单,因为我之前完成了一百万次没有遇到任何麻烦。但是,我发现在记录验证错误时,所有无效字段在validationErrors数组中都有一个索引,但消息是空的。

是的,我确实在模型中设置了验证消息,因此我不确定它为什么是空的。

以下是我的模型验证:

public $validate = array(
    'effective_policy_date' => array(
        'date' => array(
            'rule' => array('date'),
            'message' => 'Invalid date format',
        ),
        'notEmpty' => array(
            'rule' => array('notEmpty'),
            'message' => 'Policy date required',
        ),
    ),
    'business_address' => array(
        'notEmpty' => array(
            'rule' => array('notEmpty'),
            'message' => 'Business address required',
        ),
    ),
    'city' => array(
        'notEmpty' => array(
            'rule' => array('notEmpty'),
            'message' => 'City required',
        ),
    ),
    'zip_code' => array(
        'notEmpty' => array(
            'rule' => array('notEmpty'),
            'message' => 'Zip code required',
        ),
    ),
    'state_id' => array(
        'notEmpty' => array(
            'rule' => array('notEmpty'),
            'message' => 'State required',
        ),
    ),
    'contact_person' => array(
        'notEmpty' => array(
            'rule' => array('notEmpty'),
            'message' => 'Contact person required',
        ),
    ),
    'phone' => array(
        'notEmpty' => array(
            'rule' => array('notEmpty'),
            'message' => 'Phone number required',
        ),
    ),
    'email' => array(
        'notEmpty' => array(
            'rule' => array('notEmpty'),
            'message' => 'Email address required',
        ),
        'email' => array(
            'rule' => array('email'),
            'message' => 'Invalid email format',
        ),
    ),
);

在提交带有空字段的表单后,这里是validationErrors数组的输出:

[AccountsRequest] => Array
    (
        [effective_policy_date] => Array
            (
            )

        [policy_number_one] => Array
            (
            )

        [policy_number_two] => Array
            (
            )

        [policy_number_three] => Array
            (
            )

        [policy_number_four] => Array
            (
            )

        [business_address] => Array
            (
            )

        [city] => Array
            (
            )

        [zip_code] => Array
            (
            )

        [state_id] => Array
            (
            )

    )

为了完整起见,这里是我在Form中使用的Form->创建数组,以及负责处理表单提交的控制器操作:

表单create()方法

<?php 
    echo $this->Form->create(
        'Request', 
        array(
            'novalidate' => 'novalidate', 
            'action' => 'new_request', 
            'inputDefaults' => array(
                'label' => false, 
                'div' => false,
                'error' => array(
                    'attributes' => array(
                        'wrap' => 'label', 'class' => 'error'
                    )
                )
            )
        )
    );
?>

控制器操作

public function new_request()
{
    $this->page_id = 'requester_newform';

    if($this->request->is('post'))
    {
        if($this->Request->saveAll($this->request->data, array('deep' => true, 'validate' => 'only')))
        {
            $this->Session->setFlash('Request saved successfully', 'flash/success');
        }
        else
        {
            $this->Session->setFlash('Could not save request. Please correct validation errors', 'flash/error');

        }
    }
}

您会在验证数组中看到验证错误中的一些不足,这仅仅是因为我还没有完全将原始HTML转换为CakePHP表单。

问题:validationErrors数组不应该为空。它应该包含notEmpty规则的消息,因此Form的前端有空的错误验证元素。关于我做错了什么的任何想法?

1 个答案:

答案 0 :(得分:0)

阿尔格,多么烦人。我已经弄清楚了,这是一个很好的经验教训。

对于将来遇到类似问题的任何人,请确保您的输入字段符合当前表单模型的关系。

例如,在此示例中,我的表单模型为'Request'。请求hasMany 'AccountsRequest'。所以我的表单输入类似于:

AccountsRequest.effective_policy_date

应该在哪里

AccountsRequest.0.effective_policy_date

通过此更改,我的模型验证消息现在显示没有问题。

我仍然很想知道,为什么CakePHP甚至将这些字段视为无效,而且,如果它足够智能,可以将这些字段视为无效,为什么它没有给我验证消息。

哦,好吧.....