スポンサーリンク

CakePHP2でFormHelper::create()メソッドのPOST先URLに勝手にIDがつかないようにする

CakePHPで既存のデータを編集する場合は

/users/edit/1
みたいな形でプライマリキーを付けて編集画面にアクセスしますが、idをポストで渡す場合はなどでこれを付けたくない場合。

$this->Form->create('User',array('url'=>array('controller'=>'users','action'=>'edit') ));

このようにしても、request->dataの中に指定したモデル名のidがある場合は勝手に上記のようなIDが付いたURLにポストしてしまいます。
これを回避したい場合はどうしたらいいか?

方法1
じか書きURLで渡す

$this->Form->create('User',array('url'=>$this->Html->url(array('controller'=>'users','action'=>'edit')) ));

方法2
(試してないけど)どうも、第1引数のモデル名をキーにしてpkを探して入れているので、指定せずにフォームを作ればよさそう?

$this->Form->create(null,array('url'=>$this->Html->url(array('controller'=>'users','action'=>'edit')) ));

ただし、ほかのinput()メソッドなどでフォームを作るときにカラム名だけでなくモデル名も一緒に記載する必要が出てきます。


$this->Form->input("name");

これを

$this->Form->input("User.name");

こうする。

みたいな感じですね。