【发布时间】:2012-05-10 07:27:42
【问题描述】:
短版
我在表单上有一些 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 上 HABTM form validation in CakePHP 中的第二个答案(由 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。
【问题讨论】:
-
什么蛋糕版本,
$this->validationErrors长什么样子? -
@jeremyharris 我使用的是 Cake 2.1.1,但实际上自从 Cake 1.3.x 以来我就遇到了这个问题。
$this->validationErrors为空,但$this->Request->validationErrors为我提供了包含我在模型中设置的“请选择 1”错误消息的数组。 -
是的,但是验证错误数组的格式是什么?这就是 Cake 如何确定一个字段是否应该显示错误。您可能需要稍微按摩一下,这就是我要说的,就像您链接到的问题中给出的答案一样。
-
@jeremyharris 是的,你是对的,我链接到的问题中的已接受答案实际上非常有效。我之前尝试过,但它不起作用,但从那以后我做了一些模型更改,所以我猜是这样。很抱歉浪费您的时间。我已将此标记为重复问题。
-
不浪费,不用担心。很高兴你成功了!
标签: cakephp