質問: $this->Form->input('date',['type'=>'date','monthNames' => false]) ?> にて、記載して、submit にて送信した場合、 データは、 "date": { "year": "2017", "month": "05", "day": "10" } この様な形式になると思うのでが、このままでは形式が違うので、save 出来ないので、下記の様に変更する必要があると思っております。 "year": "2017", "month": "05", "day": "10" どの様に変更したら良いのでしょうか? 何か簡単な方法があるのでしょうか?
回答: テーブルのカラムをdate型にするのが1番簡単だと思います。 テーブルのカラムを変更できないのであれば、Entityで仮想プロパティdateを作る方法がいいと思います。以下のようにアクセサーとミューテーターを用意して、テーブルのカラムを間接的に参照・変更する方法です。(以下はサンプルコードであって、実際にはやってみていません。たぶん、型やnullチェックとかも必要だと思います) ``` class Xxx extends Entity { protected function _getDate() { return new FrozenDate($this->year . '-' . $this->month . '-' . $this->day); } protected function _setDate($date) { $this->year = $date->format('Y'); $this->month = $date->format('m'); $this->day = $date->format('d'); } } ``` あとは、type='date'を使うのをやめて、テーブルに合わせて、それぞれtype='select'を使うのはわかりやすくていいと思います。