web-dev-qa-db-ja.com

JFactory :: getApplication()-> input-> post-> get()は空のサブ配列/オブジェクトをプルーニングします

私はPOST ajax呼び出しを次のように送信しています:

_var request = {
    option    : 'com_ajax',
    module    : 'mod_test',  // to target: mod_test
    method    : 'Test',  // to target: function TestAjax in class modTestHelper
    format    : 'raw',
    data      : {a: [], b: {}, c: [0], d: [null]}
};
$.ajax({method: 'POST', data: request})
// .success( ...yatta yatta
_

私は受け取っています:

_$data = JFactory::getApplication()->input->post->get('data', array(), 'array');
_

ただし、渡された空のサブ配列(a)とサブオブジェクト(b)は、phpスクリプトに到達する前に消去されます。したがって、_$data_の内容は_['c'=>'0', 'd'=>['']]_です。つまり、isset($data['a'])またはisset($data['b'])を呼び出すと、falseとして評価されます。

私のモジュールでは、空の配列を表すために文字列_0_を渡してしまいましたが、空の配列をphpに渡すことが許可されている場合、コードはより簡潔になります。 (私のプロジェクトでは、最初のレベルには既知の数の要素があり、サブ配列のみが動的に生成されます。)

  1. これはバグ、機能、および/または既知の動作ですか?
  2. 空のサブ配列を受け入れるように_JFactory..._行を調整できますか?

私はいくつかの洞察を得ましたが、これらの関連する回答から完全な解決策ではありませんでした:

Joomla 3.8.6を使用しています

1
mickmackusa

$ _POSTをヘルパーのajaxメソッドにダンプすると、空の配列がサーバーにヒットしないことがわかります。 Joomlaの入力オブジェクトは、$ _ POSTからの値の取得に完全に依存しています。

JQuery ajaxは空の配列を渡しません。詳細については、この例を参照してください。 https://stackoverflow.com/questions/9397669/jquery-ajax-jsonp-how-to-actually-send-an-array-でもその空の場合

2
jamesgarrett