CakePHP3 _ids形式のデータを送信する
リクエストデータをエンティティに変換したい時の話。
CakePHP3のチュートリアルを進めて行くと、説明なしに以下のコードが出現します。
第一引数に(フィールド名._ids)形式で値を渡すこの動き。初級エンジニアは混乱するのではないでしょうか?
echo $this->Form->control('tags._ids', ['options' => $tags]);
どういう意味かというと、idsで指定したデータを一緒にエンティティへと変換してくれます。
コントローラーに対して、フェールド名で指定したエンティティの値を送信できるようになります。
試しにコントローラー側でgetDate()してみると、_idsをキー、エンティティのデータを値に持つ配列が作られていることがわかりますね。
[ 'user_id' => '1', 'title' => '今日はいい1日となった', 'body' => 'カフェで気分転換をしていた', 'tags' => [ '_ids' => [ (int) 0 => '13', (int) 1 => '1' ] ] ]
この状態でpatchEntityすると、tagのデータがそれぞれエンティティに変換されます。
バリデーション・保存して、関連するレコードを登録できました。
以上