Jaki jest właściwy sposób na uzyskanie całego $ _POST?

26

W Joomla! 2.5.x Mógłbym po prostu biec, JRequest::get('post');ale widzę, że JRequestjest to przestarzałe w Joomla! 3.x Powinienem użyć JInput.

W tej chwili używam tego kodu, aby uzyskać całość $_POST:

$app = JFactory::getApplication();
$postData = $app->input->getArray(array_flip(array_keys($_POST)));

Ale wydaje się to dość kłopotliwe i napotykam problemy, jeśli zastosuję je w połączeniu z $app->input->set();, myślę, że byłby lepszy sposób?

Kiedy szukałem tego wcześniej, znalazłem ludzi, którzy mówili, że możesz po prostu biegać

$app = JFactory::getApplication();
$postData = $app->input->post;

Ale kiedy to wypróbowałem, po prostu dostałem instancję JInputobiektu.

Spunkie
źródło

Odpowiedzi:

31
$app = JFactory::getApplication();
$postData = $app->input->post;

Jest to dobra droga, otrzymasz obiekt JInput i możesz go używać jak JRequest

$var = $postData->get('varname', 'defaultvalue', 'filter');

Filtr może mieć postać „int”, „cmd” lub wiele innych - pełną listę można znaleźć w tej funkcji: https://github.com/joomla/joomla-cms/blob/a3df15f1ddad6d9051d53f939b6afd2f5fca60b7/libraries/joomla/filter/input .php # L138

Jeśli chcesz tylko tablicę, możesz to zrobić

$array = $app->input->post->getArray();

Ale należy unikać tego stylu uzyskiwania dostępu do danych użytkownika bez filtrowania.

Harald Leithner
źródło
1
Często muszę uzyskać całość, $_POSTnie znając nazw zmiennych, które muszę uzyskać, dlatego używanie takiego JInputobiektu w wielu przypadkach nie jest przydatne. Jednak wciąż dobra odpowiedź.
Spunkie
2
Jako FYI Dotyczy $app->input->post->getArray();tylko wersji Joomla 3.2.0 i nowszych. I we wszystkich wcześniejszych wersjach (w tym 2.5) musisz używać$app->input->getArray($_POST)
George Wilson
3

Wydaje się, że innym sposobem na osiągnięcie tego jest po prostu przekazanie pustej tablicy:

$app = JFactory::getApplication();
$postData = $app->input->getArray(array());

Spowoduje to odzyskanie wszystkiego w JInputdanych var tak, jakbyś miał dostęp do $_REQUESTsuper.

To nie działa w Joomla! Wersja 2.5.x od JInputchociaż.

Spunkie
źródło
-3

Mam nadzieję, że to zadziała,

JRequest :: get ('post');

Pomoże Ci to pobrać dane z ekwiwalentu $ _POST w PHP.

goggler
źródło
2
Pytanie wyraźnie mówi, że ta metoda jest przestarzała, więc OP szuka zaktualizowanej metody za pomocą JInput.
David Fritsch
@Harald, czy mógłbyś wyczyścić tę odpowiedź ze swoimi specjalnymi przywilejami? Wygląda na to, że tego użytkownika już nie ma.
mickmackusa