投稿日:

CakePHPでinputの名前で5層に対応する

CakePHPで配列で指定したinputに$this->dataが連動してくれる
helperのありがたい機能を使っていたのですが、
<?php echo $form->input(“Part.1.element.1.radio”, array(‘type’=>’text’)); ?>
という感じの5層構造になるとデータの引継ぎをしてくれません。
helperの対応しているのは4層までみたいです。

困ったということで調べてみるのですが、これという記事が見つからないので
自分でカスタマイズして5層でもデータがやり取りできるようにしました。


まず/cake/lib/view/view.phpにviewに関する記述が書いているので
これを改造するのですが、cake本体は変えては駄目なので
コピーしてきて/app/views/の下にview.phpを配置します。
配置したファイルを改造するのですが、改造したファイルはこちら

次にhelperの改造ですが、helperの変更は/app/app_helper.php内で行います。
/cake/libs/view/helper.phpの中から階層に関連する関数だけコピーして
取り出して改造を加えてapp_helper.phpに入れます。
app_helper.phpの記述はこちら

app_helper.phpは何もせずに読み込まれるのですが、
view.phpはそのままでは呼ばれないので/app/config/bootstrap.phpで
App::import(‘Core’, ‘View’, array(‘file’ => ‘../app/views/view.php’));
と記述してあげます。

以上で5層の配列の名前のやり取りが出来るようになりました。