这应该是一个很好的简单问题。
在表单上,我有许多与为特定功能选择各种用户相关的复选框。复选框是这样创建的
$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->数据数组中显示未选中的复选框?
答案 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] );
}
}