web-dev-qa-db-ja.com

フロントエンド:一部のフィールドが保存関数の$ dataパラメーターにないのはなぜですか?

フロントエンド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_は空です。

ありがとう。

2
Pep Lainez

コードは表示されないので、JControllerFormJModelAdminについて知っていることを説明します。もちろん、サブクラスのオーバーライドの影響を受けます。

JControllerForm

JControllerFormsave()メソッドは、次の行を使用してJForm配列を取得します。

_$data  = $this->input->post->get('jform', array(), 'array');
_

余分な_->post_セグメントとJRegistry()テストの比較に注意してください。つまり、送信されたpostデータからのみデータを取得しています。この例では、結合されたJInputをソースとして使用しています。可能性は低いですが、これらのフィールドがフォームURLの一部として送信された場合(つまり、送信のget部分で)、それらは見つかりません。

詳細などなし。フォームhtml、コントローラーとモデルコード(特にsave/bindなどをオーバーライドする場合)とは言いがたいです。さらに詳細を追加できる場合は、おそらく私の答えを拡張できます。

2
Craig