精简版
我在表格上有一些 HABTM 复选框。验证工作正常(至少需要检查一个复选框才能通过验证),但没有按应有的方式生成 CakePHP 错误消息 div。
长版
我有一个允许用户填写他们的姓名和电子邮件地址,然后从他们希望收到的小册子(复选框)列表中进行选择。
表格如下所示:
<?php
echo $this->Form->create('Request',array('action' => 'index'));
echo $this->Form->input('id');
echo $this->Form->input('name');
echo $this->Form->input('email');
echo $this->Form->input('Brochure',array(
'label' => __('Information Required:',true),
'type' => 'select',
'multiple' => 'checkbox',
'options' => $list,
'selected' => $this->Html->value('Brochure.Brochure'),
));
echo $this->Form->submit('Submit');
echo $this->Form->end();
?>
在我的控制器中,$list
设置如下:
$this->Request->Brochure->find('list',array('fields'=>array('id','name')));
在 Stack Overflow 上的 CakePHP 中的 HABTM 表单验证中阅读了第二个答案(由 user448164 发布)后,我将我的请求模型设置如下:
<?php
class Request extends AppModel {
var $name = 'Request';
function beforeValidate() {
foreach($this->hasAndBelongsToMany as $k=>$v) {
if(isset($this->data[$k][$k]))
{
$this->data[$this->alias][$k] = $this->data[$k][$k];
}
}
}
var $validate = array(
'name' => array(
'rule' => 'notEmpty',
'message' => 'Please enter your full name'
),
'email' => array(
'rule' => 'email',
'message' => 'Please enter a valid email address'
),
'Brochure' => array(
'rule' => array('multiple', array('min' => 1)),
'message' => 'Please select 1'
),
);
?>
这实际上工作得很好 99%。如果未选中任何复选框,则验证将失败。但是,唯一的问题是 Cake 没有在 上设置“错误”类<div>
,也没有<div class="error-message">Please select 1</div>
按应有的方式创建。
对于姓名和电子邮件,没有问题 - 错误 div 正在正确创建。
因此,澄清一下,验证适用于我的 HABTM 复选框。唯一的问题是没有生成错误 div。