CakePHP1.3 お手軽な複数チェックボックスの作り方

notoです。

CakePHPでforeach内のチェックボックス作成をどうしたらいいものかと、悩んでおりましたところ。 google先生がよさげな方法を教えてくれました。

まずは、viewです。 注目すべきところは、$form->checkboxの'User.id.' . $user['User']['id']の部分です。 これで一意のフィールド名を指定してあげることができます。

環境

  • CakePHP1.3

View

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php foreach($users as $user): ?>
<tr>
    <td>
        <?php echo $form->checkbox('User.id.'.$user['User']['id'],
                        array('value' => $user['User']['id']
        ));?>
    </td>
    <td>
        <?php echo $user['User']['username']; ?>
    </td>
    <td>
        <?php echo $html->link('編集',array(
          'controller' => 'encoded_files',
          'action' => 'edit',
           $user['User']['id']
        ));?>
    </td>
</tr>
<?php endforeach; ?>

次にControllerです。 $this->dataの中は、User.id.[1] User.id.[2] User.id.[3]・・・・で格納されているので、 foreachでループさせながら、チェックボックスにチェックされたIDのユーザーを削除することができます。

Controller

1
2
3
4
5
foreach($this->data['User']['id'] as $key => $value) {
 if($value != 0) {
   $this->User->delete($value);
 }
}

これだけでhelper等を作成する必要なく、さくっと複数チェックボックスが作成できます。

ちなみに、上記のやり方は、SecurityComponent利用時に、使えませんので少し修正してあげる必要があります。

SecurityComponent使用時

変更点は、$form->checkboxの'User' . $user['User']['id'] . 'id'の部分です。 こうすることで、SecurityComponent使用時でもPOSTすることができます。

View

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php foreach($users as $user): ?>
<tr>
    <td>
        <?php echo $form->checkbox('User'.$user['User']['id'] . '.id',
            array('value' => $user['User']['id']
        ));?>
    </td>
    <td>
        <?php echo $user['User']['username']; ?>
    </td>
    <td>
        <?php echo $html->link('編集',array(
            'controller' => 'encoded_files',
            'action' => 'edit',
             $user['User']['id']
        ));?>
    </td>
</tr>
<?php endforeach; ?>

Controller

1
2
3
4
5
foreach($this->data['User'] as  $key => $value) {
    if($value['id'] !=  0) {
        $this->User->delete($value['id']);
    }
}

これ考えた人頭いいですね。。。

参考

Multiple checkboxes

Comments