web-dev-qa-db-fra.com

Comment accéder à un tableau dans $ _GET en utilisant JInput?

J'ai étudié différentes manières d'obtenir un tableau à l'aide de JInput.

Selon http://docs.joomla.org/Retrieving_request_data_using_JInput , il y a 2 méthodes que je peux utiliser.

  • Méthode1

    $jinput = JFactory::getApplication()->input;
    $jinput->get('nameOfArray',array(),'ARRAY');
    
  • Méthode2

    $jinput = JFactory::getApplication()->input;
    $jinput->getArray('nameOfArray',array());
    

Remarque: nameOfArray est le nom du tableau auquel je souhaite accéder dans le tableau superglobal $ _GET.

Method1 fonctionne, mais Method2 donne l'erreur suivante:

Erreur fatale capturable: l'argument 1 transmis à JInput :: getArray () doit être du type tableau, chaîne donnée, appelée dans test.php

Ma question est la suivante: Quelle est la différence entre ces deux méthodes?

  • Le tableau utilisé dans les deux exemples est le même
  • J'utilise Joomla 2.5.x
  • Le tableau est un tableau multidimensionnel.
7
TryHarder

La première méthode recherche les éléments commençant par le nom que vous avez spécifié:

<input type="hidden" name="nameOfArray[test][1]" value="test" />
<input type="hidden" name="nameOfArray[]" value="test" />
<input type="hidden" name="nameOfArray[test][]" value="test" />
<input type="hidden" name="nameOfArray[tester][yes]" value="test" />

Tous les éléments ci-dessus seraient renvoyés dans le cadre d'un tableau de la première méthode.


La deuxième méthode ne tente pas de charger un tableau par son nom, mais accepte un tableau et essaie de trouver des éléments d'entrée correspondant aux clés. Prendre l'entrée suivante:

<input type="hidden" name="object1" value="test1" />
<input type="hidden" name="name2" value="test2" />
<input type="hidden" name="element3" value="test3" />

Si vous avez ensuite fait ce qui suit:

$elements = array('object1'=>'', 'name2'=>'', 'element3'=>'');
$jinput = JFactory::getApplication()->input;
$jinput->getArray($elements); // note that the second parameter is "datasource" not default value

Vous obtiendrez alors un tableau en tant que tel dans $element:

array('object1'=>'test1', 'name2'=>'test2', 'element3'=>'test3');
5
David Fritsch