Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP未填充单选按钮在提交时更改为不需要的值_Php_Validation_Forms_Cakephp - Fatal编程技术网

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种选择:

  • 未选择任何内容
  • 选择“否”
  • 选择“是”
  • 单选按钮应(见第9点);(1) 上述情况不应该发生。因此,与其直接回答你的问题,不如说你应该考虑使用复选框。复选框自然适合布尔值,在这种情况下可能更有用


    如果数据库字段为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'];
      }
    }