CakePHPのフォームヘルパーでajaxを使うとき、ajax前後でフォームパーツのname属性が
変わってしまう場合の対処方法についてです。
index.php というページでajaxを使い、クラス名が ajaxSpace の中身を書き換えます。
ajaxの内容として表示されるページは index_ajax.php となります。
まず、CakePHPのフォームヘルパーでフォームを宣言します。Create()の第一引数にはPostという値を指定します。このPostという第一引数を設定することにより、name属性が data[Post][name] という形で自動的に出力されます。
<?php echo $form->create('Post', array('type' => 'post', 'action' => 'add')); ?> <?php echo $form->text('name'); ?> <div class="ajaxSpace">TEST</div> <?php echo $form->end(); ?>
出力されるテキストボックス部分のソース。
<input name = "data[Post][name]" type = "text" value = "" id = "PostName">
次にajaxを使って ajaxSpaceに新しいテキストボックスを出力します。
(ajax処理部分は省略)
ajaxで出力されるテキストボックスを以下のように設定します。
<?php echo $form->text('name'); ?>
ajax実行後に表示されるテキストボッックスのソース
<input name = "data[name]" type = "text" value = "" id = "Name">
ajax前と後ではname 属性が data[Post][name] 、 data[name] という違いがあります。
ajax前は自動に第一引数をname属性の中に入れてくれるのです。
これにより、ajax前にPostしたときと、ajax後にPostしたときの配列のキーが変わってしまいます。
[対処方法]
テキストボックス、セレクトボックスなどの第一引数を モデル名.name のようにモデル名を省略しないで記載するとajax前後でnameの属性が変わらなくなります。
ajaxで出力するソースを下記のようにします。
<?php echo $form->text('Post.name'); ?>