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