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

1

フォームをコミットすると、チェックされているかどうかに関係なく、常にすべてのチェックボックスが返されます。このデータをどうするかはあなた次第です。私が知る限り、CakePHP にはあなたが求めているような機能はありませんが、いつでも PHP を使用して空の要素の設定を解除できます...

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