やりたいこと
CakePHP ではフォームを作成するための FormHelper
があって、$this->Form->create()
で作成されたフォーム内で $this->Form->input( 'name' )
のように input
要素を作成する事ができるが、name="param[]"
のような配列パラメータを作成したい場合に以下のようにやってもうまくいかない。
ctpファイルの記載
<?php $this->Form->create( 'User' ); ?>
<?php $this->Form->input( 'param.1', array( 'type' => 'text' ) ); ?>
<?php $this->Form->end(); ?>
出力
// ※ 実際に出力される attribute 等は省略しています
<form action="/user/new">
<input type="text" name="data[param][1]" /> // name="data[User][param][1]" と出力されてほしい
</form>
解決策
Form->create()
で作成されているフォーム内ではモデル名が FormHelper::$defaultModel
に格納されているので、これを利用する。
ctpファイルの記載
<?php $this->Form->create( 'User' ); ?>
<?php $this->Form->input( $this->Form->defaultModel . '.param.1', array( 'type' => 'text' ) ); ?>
<?php $this->Form->end(); ?>
出力
// ※ 実際に出力される attribute 等は省略しています
<form action="/user/new">
<input type="text" name="data[User][param][1]" /> // ちゃんと出ている
</form>
終わりに
FormHelper を使うと $this->request->data
の内容が自動でロードされたりと便利な面もあるので積極的に使って行きたいが、ドキュメントが乏しいので都度ソースを読みに行って仕様を理解しなければならないのがつらい。CookBook の FormHelper のドキュメントを誰か更新してくれないだろうか、、、