2

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

在一个表单上,我有许多与为特定功能选择不同用户有关的复选框。复选框是这样创建的

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

提交此表单时,它会通过注册控制器,但 request->data 数组包含未选中的复选框,格式如下:

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->data 数组中的功能?

4

2 回答 2

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. 查看此页面了解更多信息。

于 2012-10-09T15:08:02.440 回答
1

提交表单将始终返回所有复选框,无论它们是否被选中,由您决定如何处理这些数据。据我所知,CakePHP 没有您要求的此类功能,但您始终可以使用 PHP 来取消设置空元素...

 foreach( $array as $key => $val ) {
   if( empty($val) ) {
     unset( $array[$key] );
   }
 }
于 2012-10-09T14:33:27.217 回答