CakePHP复选框 - 忽略未选中的复选框

时间:2012-10-09 13:58:23

标签: php forms cakephp cakephp-2.0 cakephp-2.1

这应该是一个很好的简单问题。

在表单上,​​我有许多与为特定功能选择各种用户相关的复选框。复选框是这样创建的

$this->Form->input("user_select", array(
  "type"   => "checkbox",
  "name"   => "data[Registration][User][]",
  "id"     => "UserId" . $user['User']['id'],
  "value"  => $user['User']['id'],
  "label"  => false
));

提交此表单后,它会进入注册控制器,但request->数据数组中包含的格式为:

array(
  'Registration' => array(
    'Users' => array(
      (int) 0 => '0',
      (int) 1 => '0',
      (int) 2 => '0',
      (int) 3 => '0',
      (int) 4 => '31',
      (int) 5 => '0',
      (int) 6 => '11'
    ),
)

现在数据没有任何问题,很明显我已经选择了用户的31和11,但我更喜欢这种形式的数组:

array(
  'Registration' => array(
    'Users' => array(
      (int) 4 => '31',
      (int) 6 => '11'
    ),
)

这将使处理和验证变得更加容易。

那么, CakePHP是否有能力阻止在request->数据数组中显示未选中的复选框?

2 个答案:

答案 0 :(得分:4)

尝试将'hiddenField' => false添加到您的input()调用中:

$this->Form->input("user_select", array(
  "type"        => "checkbox",
  "name"        => "data[Registration][User][]",
  "id"          => "UserId" . $user['User']['id'],
  "value"       => $user['User']['id'],
  "label"       => false,
  "hiddenField" => false
));

CakePHP会自动添加一个隐藏字段,除非你不告诉它,可能是因为所有表格的键都在$this->data->request中表示。查看this page了解详情。

答案 1 :(得分:1)

提交表单将始终返回选中或不选中的所有复选框。由您自行决定如何处理此数据。据我所知,CakePHP没有你要求的功能,但你可以随时使用PHP取消空元素...

 foreach( $array as $key => $val ) {
   if( empty($val) ) {
     unset( $array[$key] );
   }
 }