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

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'); ?>


Author: webmaster