CakePHP フォームヘルパーで生成したhiddenの値に配列を使用する

ふと「hiddenの値に配列を使用したい」と思い試してみたところ、思っていた方法では実現できなかったので、メモも兼ねてブログにアップ。


自分で書く『hidden』要素なら下のコードみたいな感じで書きます。

<input type="hidden" name="data[]" value="1" />
<input type="hidden" name="data[]" value="2" />
<input type="hidden" name="data[]" value="3" />

フォームヘルパーも同じだろうと思い、以下のように書くと全然違うことになっちゃいました。

<?php
    echo $form->hidden('data[]', array('value' => 1));
    echo $form->hidden('data[]', array('value' => 2));
    echo $form->hidden('data[]', array('value' => 3));
?>

▼print_r関数で出力してみた結果

Array
(
    [ data[ ] => 3
)

配列のキーが『 data[ 』になっちゃったみたいです。

そんなわけで、要素の名前を以下のように変更。

<?php
    echo $form->hidden('data][]', array('value' => 1));
    echo $form->hidden('data][]', array('value' => 2));
    echo $form->hidden('data][]', array('value' => 3));
?>

▼print_r関数で出力してみた結果

Array
(
    [data] => Array
        (
             [0] => 1
             [1] => 2
             [2] => 3
        )
)

これで、『フォームヘルパーで生成したhiddenの値に配列を使用する』ことができました。

ヘルパーを作成したほうがスマートな気がするので、ヒマを見つけて作りたいと思います・・・


追記

ちなみに、以下の書き方でも上記と同じ結果が得られます。

<?php
    echo $form->hidden('data][', array('value' => 1));
    echo $form->hidden('data][', array('value' => 2));
    echo $form->hidden('data][', array('value' => 3));
?>
<?php
    echo $form->hidden('data.1', array('value' => 1));
    echo $form->hidden('data.2', array('value' => 2));
    echo $form->hidden('data.3', array('value' => 3));
?>

2つ目の方法(配列のキーをドットでつなぐ方法)の場合、初めにモデル名をつけないと配列が分かれてしまうので注意してください。
モデル名が『Post』なら『Post.data.1』といった書き方にする必要があります。