フロントエンドJFormを使用してデータを操作しています。 htmlフォームは正しいですが、モデルの保存機能に送り返されたときに、すべてのデータを受け取りません。
これは、save
が_$data
_パラメータを介して受け取るデータです。
_Array
(
[created] => XXXXXXXXXXXXXXXXX
[updated] => XXXXXXXXXXXXXXXXX
[wasteId] => X
[price] => XXXX
[pricenight] => XXX
[pricefreeday] => XXXX
[pricefreedaynight] => XXXX
[tags] =>
)
_
しかし、私が使うとき
_$formData = new JRegistry($this->input->get('jform', '', 'array'));
_
または、JControllerForm saveメソッドが行うようにデータを取得したとき
_$formData = new JRegistry($this->input->post->get('jform', array(), 'array'));
_
私が持っている
_Joomla\Registry\Registry Object
(
[data:protected] => stdClass Object
(
[wasteId] => X
[price] => XXXX
[pricenight] => XXX
[pricefreeday] => XXXX
[pricefreedaynight] => XXXX
[contractId] => Array
(
[0] => XX
[1] => XX
)
[created] => XXXXXXXXXXXXXXXXX
[updated] => XXXXXXXXXXXXXXXXX
[id] => XX
)
)
_
したがって、_$data
_パラメータにフィールドid
およびcontractId
がありません。
モデルcontractId
関数の_$data
_パラメーターにsave
およびidを設定するにはどうすればよいですか?
ちなみに、私が使用しているモデルはJModelAdminから派生し、コントローラーはJControllerFormから派生しています。コントローラには、フォームからデータを収集する方法に影響を与える可能性のあるオーバーライドされた関数はありません。
[〜#〜]編集[〜#〜]
より多くの手がかり:_JControllerForm::save
_の詳細を調べる_$data
_には、正しい値を持つid
コンポーネントがあることを確認しましたが、このため、637行目が空の値で上書きされています。
_$recordId = $this->input->getInt($urlVar); // around line 634 of JControllerForm
_
_$recordId
_の値が "id"であるにもかかわらず、_$urlVar
_を空の値に設定します。その後、JControllerForm $ data ["id"]の約637行目が変更されます。
_$data[$key] = $recordId
_
_$key
_の値は "id"であり、_$recordId
_は空です。
ありがとう。
コードは表示されないので、JControllerForm
とJModelAdmin
について知っていることを説明します。もちろん、サブクラスのオーバーライドの影響を受けます。
JControllerForm
JControllerForm
のsave()
メソッドは、次の行を使用してJForm
配列を取得します。
_$data = $this->input->post->get('jform', array(), 'array');
_
余分な_->post
_セグメントとJRegistry()
テストの比較に注意してください。つまり、送信されたpost
データからのみデータを取得しています。この例では、結合されたJInput
をソースとして使用しています。可能性は低いですが、これらのフィールドがフォームURLの一部として送信された場合(つまり、送信のget
部分で)、それらは見つかりません。
詳細などなし。フォームhtml、コントローラーとモデルコード(特にsave/bindなどをオーバーライドする場合)とは言いがたいです。さらに詳細を追加できる場合は、おそらく私の答えを拡張できます。