【问题标题】:CakePHP checkboxes - ignore unselected checkboxesCakePHP 复选框 - 忽略未选中的复选框
【发布时间】:2012-10-09 13:58:23
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    尝试将'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

    【讨论】:

    • 那里的工作很不错,这正是我所追求的。
    【解决方案2】:

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

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

    【讨论】:

    • 这就是我一直在做的,但如果存在的话,我想要一个更干净更通用的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    相关资源
    最近更新 更多