CakePHP未填充单选按钮在提交时更改为不需要的值
我有一个表单元素:CakePHP未填充单选按钮在提交时更改为不需要的值,php,validation,forms,cakephp,Php,Validation,Forms,Cakephp,我有一个表单元素: $form->input('ChecklistResponseGovernmentInfo.driversLicenseIsOnline', array('type'=>'radio', 'empty'=> true, 'options'=>array(0 => 'No', 1 => 'Yes'))) 这是它的验证规则: 'driversLicenseIsOnline' => array( 'boolean' => a
$form->input('ChecklistResponseGovernmentInfo.driversLicenseIsOnline', array('type'=>'radio', 'empty'=> true, 'options'=>array(0 => 'No', 1 => 'Yes')))
这是它的验证规则:
'driversLicenseIsOnline' => array(
'boolean' => array(
'rule' => array('boolean'),
'allowEmpty' => false,
),
),
这是它的数据库字段(MySQL):
当我第一次加载表单的新副本时,单选按钮集未选中。如果我没有做任何其他事情就提交了表单,当表单重新加载时,单选按钮填写为“否”,并且验证闪烁消息显示“此字段不能留空”
当我停止使用零(0)作为“否”的值时,问题就消失了,但我希望将此值存储为布尔值,而不是其他我必须手动来回转换为布尔值的值
当提交此元素时,如果没有选择单选项,如何阻止Cake自动填充该元素的值?设置单选按钮的方式实际上有3种选择:
如果数据库字段为tinyint(1),Cake会假设您需要一个复选框,这样您就可以在FormHelper调用中去掉选项数组。所以我在问卷调查中遇到了类似的问题,在语义上,单选按钮保持为空是正确的——当一个是或否的问题仍然没有回答时。在这种情况下,它似乎不是这样的: 你抽烟吗?[是吗?] 这样更好: 你抽烟吗?(是)(否)
我解决这个问题的方法是
'options'=>数组(1=>'No',2=>'Yes')
编辑:好的,我不认为Cake会自动用0填充该值,很可能是浏览器行为。当保存失败时,您可以通过调试($this->data)来测试这一点。(以防万一,您可以在此处取消设置该值)在自己搜索答案时偶然发现了这个问题
这个讨厌的黑客为我修复了它(在CakePHP2.1中-应该在1.3中工作):
验证失败后,如果$this->request->data中的值为空,则取消设置该值:
if ($this->Model->save($this->request->data) {
// data saved
}
else {
// data failed to save
// unset radio if empty
if ($this->request->data['Model']['radio_field'] == "") {
unset($this->request->data['Model']['radio_field'];
}
}
呃。没错,但我希望Cake将此值存储为布尔值,而不是手动来回转换为布尔值的其他值。我不需要复选框,因为默认情况下,复选框是打开还是关闭的,取决于HTML属性集。我希望用户被迫选择“是”或“否”,如果他们忽略了该选项,则不会提交默认值。
if ($this->Model->save($this->request->data) {
// data saved
}
else {
// data failed to save
// unset radio if empty
if ($this->request->data['Model']['radio_field'] == "") {
unset($this->request->data['Model']['radio_field'];
}
}