Wie greife ich mit JInput auf ein Array in $ _GET zu?

7

Ich habe verschiedene Möglichkeiten untersucht, um mit JInput ein Array zu erhalten.

Laut http://docs.joomla.org/Retrieving_request_data_using_JInput gibt es zwei Methoden, die ich verwenden kann.

  • Methode 1

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

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

Hinweis: nameOfArrayist der Name des Arrays, auf das ich im superglobalen Array $ _GET zugreifen möchte.

Methode1 funktioniert, aber Methode2 gibt den folgenden Fehler aus:

Fangender schwerwiegender Fehler: Argument 1, das an JInput :: getArray () übergeben wird, muss vom Typ Array sein, Zeichenfolge angegeben, in test.php aufgerufen

Meine Frage ist: Was ist der Unterschied zwischen diesen beiden Methoden?

  • Das in beiden Beispielen verwendete Array ist das gleiche
  • Ich benutze Joomla 2.5.x.
  • Das Array ist ein mehrdimensionales Array.
TryHarder
quelle

Antworten:

5

Die erste Methode sucht nach Elementen, die mit dem von Ihnen angegebenen Namen beginnen:

<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" />

Alle oben genannten Elemente werden in Methode 1 als Teil eines Arrays zurückgegeben.


Methode zwei versucht nicht, ein Array nach Namen zu laden, sondern akzeptiert ein Array und versucht, Eingabeelemente zu finden, die mit den Schlüsseln übereinstimmen. Nehmen Sie die folgende Eingabe:

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

Wenn Sie dann Folgendes getan haben:

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

Sie würden dann ein Array als solches erhalten in $element:

array('object1'=>'test1', 'name2'=>'test2', 'element3'=>'test3');
David Fritsch
quelle
1
Ja, und die Dokumentation ist falsch. Ich habe es geändert.
Dmitry Rekun