cakephp3でbelongsToManyの連結テーブルにdate型データを持たせていますが、selectボックスで入力した_joinDataのrequestデータがSecurityComponentにより、
Missing field 'calendars.1._joinData.subscribed, in POST data
となって先へ進めません。
連結テーブルのbeforeMarshalで$data[subscribed.year],$data[subscribed.month],$data[subscribed.day]配列から直接合成してみましたが同様の結果でした。
viewではdate型オブジェクトを自動で配列のselectボックスをレンダーしてくれるのですが、requestからの復元はどうすればいいのでしょうか?
(textとしてdatepickerで入力させることは考えておりません)
なお、_joinDataではないdate型の場合はとくにエラーは出ませんでした。
どうぞよろしくお願いします。
viewで、
php
1foreach($event_data as $id=>$data){ 2 .... 3 <?= $this->Form->select("calendars.{$id}.id", $events, [ 4 'empty' => '選択', 5 'value' => ... 6 ]) ?> 7 <?= $this->Form->input("calendars.{$id}._joinData.subscribed", [ 8 'type' => 'date', 9 'dateFormat' => 'YMD', 10 'empty' => '---', 11 'value' => ... 12 ]) ?> 13}
modelで、
php
1class UsersTable extends CakeUsersTable 2{ 3 public function initialize(array $config) 4 { 5 parent::initialize($config); 6 7 $this->belongsToMany('Calendars', [ 8 'joinTable' => 'calendars_users', 9 'foreignKey' => 'user_id', 10 'targetForeignKey' => 'calendar_id', 11 'through' => 'CalendarsUsers', 12 ]); 13 .... 14 } 15} 16class CalendarsTable extends Table 17{ 18 public function initialize(array $config) 19 { 20 parent::initialize($config); 21 22 $this->setTable('calendars'); 23 $this->setDisplayField('title'); 24 $this->setPrimaryKey('id'); 25 26 $this->belongsToMany('Users', [ 27 'joinTable' => 'calendars_users', 28 'foreignKey' => 'calendar_id', 29 'targetForeignKey' => 'user_id', 30 'through' => 'CalendarsUsers', 31 ]); 32 .... 33 } 34} 35class CalendarsUsersTable extends Table 36{ 37 public function initialize(array $config) 38 { 39 parent::initialize($config); 40 41 $this->setTable('calendars_users'); 42 $this->setDisplayField('id'); 43 $this->setPrimaryKey('id'); 44 45 $this->belongsTo('Calendars'); 46 $this->belongsTo('Users'); 47 } 48}
debug_kitのメッセージ
⟩ Cake\Controller\Component\SecurityComponent->_validatePost CORE/src/Controller/Component/SecurityComponent.php, line 124 /vendor/cakephp/cakephp/src/Controller/Component/SecurityComponent.php 120 $hasData && 121 $isNotRequestAction && 122 $this->_config['validatePost'] 123 ) { 124 $this->_validatePost($controller); 125 } 126 } catch (SecurityException $se) { 127 $this->blackHole($controller, $se->getType(), $se); 128 }
debug_kitのrequestを見れば、配列データが入力されているのが確認できます。
calendars (array) 1 (array) id 1 _joinData (array) subscribed (array) year 2018 month 08 day 01
あなたの回答
tips
プレビュー