[CakePHP]ajax前後でフォームパーツのname属性のキーが変わる場合の対処方法

CakePHPのフォームヘルパーでajaxを使うとき、ajax前後でフォームパーツのname属性が
変わってしまう場合の対処方法についてです。
index.php というページでajaxを使い、クラス名が ajaxSpace の中身を書き換えます。
ajaxの内容として表示されるページは index_ajax.php となります。
まず、CakePHPのフォームヘルパーでフォームを宣言します。Create()の第一引数にはPostという値を指定します。このPostという第一引数を設定することにより、name属性が data[Post][name] という形で自動的に出力されます。
1 2 3 4 |
<?php echo $form->create('Post', array('type' => 'post', 'action' => 'add')); ?> <?php echo $form->text('name'); ?> <div class="ajaxSpace">TEST</div> <?php echo $form->end(); ?> |
出力されるテキストボックス部分のソース。
1 |
<input name = "data[Post][name]" type = "text" value = "" id = "PostName"> |
次にajaxを使って ajaxSpaceに新しいテキストボックスを出力します。
(ajax処理部分は省略)
ajaxで出力されるテキストボックスを以下のように設定します。
1 |
<?php echo $form->text('name'); ?> |
ajax実行後に表示されるテキストボッックスのソース
1 |
<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で出力するソースを下記のようにします。
1 |
<?php echo $form->text('Post.name'); ?> |
関連記事
- [CakePHP] Formでテーブル形式のデータを一括保存する方法
- [CakePHP] 複数レコードを一括保存するsaveAllの使い方
- [jQuery] FormでPOST/GETの内容をたった一行で取得する方法
- [Ajax] jQueryとPHPでWebページの一部分を更新する方法
- [jQuery] 子ウィンドウのチェックボックスの値を親ウィンドウに渡す方法