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

photo_00195

CakePHPのフォームヘルパーでajaxを使うとき、ajax前後でフォームパーツのname属性が
変わってしまう場合の対処方法についてです。

index.php というページでajaxを使い、クラス名が ajaxSpace の中身を書き換えます。
ajaxの内容として表示されるページは index_ajax.php となります。

まず、CakePHPのフォームヘルパーでフォームを宣言します。Create()の第一引数にはPostという値を指定します。このPostという第一引数を設定することにより、name属性が data[Post][name] という形で自動的に出力されます。

出力されるテキストボックス部分のソース。

次にajaxを使って ajaxSpaceに新しいテキストボックスを出力します。
(ajax処理部分は省略)

ajaxで出力されるテキストボックスを以下のように設定します。

ajax実行後に表示されるテキストボッックスのソース

ajax前と後ではname 属性が data[Post][name] 、 data[name] という違いがあります。
ajax前は自動に第一引数をname属性の中に入れてくれるのです。

これにより、ajax前にPostしたときと、ajax後にPostしたときの配列のキーが変わってしまいます。

[対処方法]
テキストボックス、セレクトボックスなどの第一引数を モデル名.name のようにモデル名を省略しないで記載するとajax前後でnameの属性が変わらなくなります。

ajaxで出力するソースを下記のようにします。

  • Categories

  • タグ

  • アーカイブ

  • 最近の投稿