好吧,简而言之,我试图验证一个表单,因为我之前完成了一百万次没有遇到任何麻烦。但是,我发现在记录验证错误时,所有无效字段在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的前端有空的错误验证元素。关于我做错了什么的任何想法?
答案 0 :(得分:0)
对于将来遇到类似问题的任何人,请确保您的输入字段符合当前表单模型的关系。
例如,在此示例中,我的表单模型为'Request'
。请求hasMany 'AccountsRequest'
。所以我的表单输入类似于:
AccountsRequest.effective_policy_date
应该在哪里
AccountsRequest.0.effective_policy_date
通过此更改,我的模型验证消息现在显示没有问题。
我仍然很想知道,为什么CakePHP甚至将这些字段视为无效,而且,如果它足够智能,可以将这些字段视为无效,为什么它没有给我验证消息。
哦,好吧.....