web-dev-qa-db-fra.com

JFactory :: getApplication () -> input-> post-> get () supprime les sous-tableaux / objets vides

J'envoie un appel POST ajax comme ceci:

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

Je reçois avec:

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

Cependant, les sous-tableaux vides passés (a) et les sous-objets (b) sont purgés avant d’atteindre mon script php. Ainsi, le contenu de $data Est ['c'=>'0', 'd'=>['']]. En d'autres termes, lorsque j'appelle isset($data['a']) ou isset($data['b']), ils sont évalués comme false.

Pour mon module, j'ai fini par passer la chaîne 0 Pour représenter un tableau vide, mais mon code serait plus ordonné si j'étais autorisé à passer un tableau vide à php. (Pour mon projet, le premier niveau contient un nombre connu d'éléments, seuls les sous-tableaux sont générés de manière dynamique.)

  1. S'agit-il d'un bogue, d'une fonctionnalité et/ou d'un comportement connu?
  2. Puis-je ajuster ma ligne JFactory... Pour accepter les sous-tableaux vides?

J'ai obtenu un aperçu, mais pas une solution complète de ces réponses connexes:

J'utilise Joomla 3.8.6

1
mickmackusa

Si vous avez vidé le $ _POST dans la méthode ajax de votre assistant, vous constaterez que ces tableaux vides ne touchent pas le serveur. L'objet d'entrée de Joomla dépend entièrement de la récupération des valeurs de $ _POST.

Ajax JQuery ne passe pas les tableaux vides, voir ceci pour un exemple supplémentaire: https://stackoverflow.com/questions/9397669/jquery-ajax-jsonp-how-to-actually-send-an -array-même-si-c'est-vide

2
jamesgarrett