วิธีที่เหมาะสมในการรับ $ _POST ทั้งหมดคืออะไร


26

ใน Joomla! 2.5.x ฉันสามารถเรียกใช้JRequest::get('post');แต่เห็นว่าJRequestเลิกใช้แล้วใน Joomla! 3.x JInputฉันควรใช้

ในขณะนี้รหัสที่ฉันใช้เพื่อให้ได้ทั้งหมด$_POST:

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

แต่สิ่งนี้ดูค่อนข้างยุ่งยากและฉันพบปัญหาหากใช้ร่วมกับ$app->input->set();ฉันจะคิดว่าจะมีวิธีที่ดีกว่านี้หรือไม่

เมื่อค้นหาสิ่งนี้ก่อนที่ฉันจะพบผู้คนบอกว่าคุณสามารถวิ่งได้

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

แต่เมื่อฉันลองสิ่งนี้ฉันก็มีตัวอย่างของJInputวัตถุ


คำตอบ:


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

เป็นวิธีที่จะไปคุณจะได้รับวัตถุ JInput และสามารถใช้งานได้เหมือน JRequest

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

ตัวกรองอาจเป็น 'int', 'cmd' หรืออื่น ๆ อีกมากมาย - รายการทั้งหมดสามารถพบได้ในฟังก์ชั่นนี้: https://github.com/joomla/joomla-cms/blob/a3df15f1ddad6d9051d53f939b6afd2f5fca60b7/library/joomla/filterterinput .php # L138

หากคุณต้องการอาร์เรย์เท่านั้นคุณสามารถทำได้

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

แต่คุณควรหลีกเลี่ยงรูปแบบการเข้าถึงข้อมูลผู้ใช้โดยไม่ต้องกรอง


1
บ่อยครั้งที่ฉันต้องได้รับทั้งหมด$_POSTโดยไม่ทราบชื่อของ vars ที่ฉันต้องได้รับนั่นคือสาเหตุที่การใช้JInputวัตถุเช่นนั้นไม่มีประโยชน์ในหลายกรณี ยังคงเป็นคำตอบที่ดี
Spunkie

2
ในฐานะที่เป็น FYI The $app->input->post->getArray();นั้นใช้ได้กับ Joomla 3.2.0 และใหม่กว่าเท่านั้น และในเวอร์ชันก่อนหน้านี้ (รวมถึง 2.5) คุณต้องใช้$app->input->getArray($_POST)
George Wilson

3

ดูเหมือนอีกวิธีหนึ่งในการบรรลุเป้าหมายนี้ก็คือการส่งอาร์เรย์ว่างเปล่า:

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

สิ่งนี้จะดึงข้อมูลทุกอย่างในJInputdata var ราวกับว่าคุณกำลังเข้าถึง$_REQUESTsuper

สิ่งนี้ใช้ไม่ได้กับ Joomla! JInputแม้ว่ารุ่น 2.5.x


-3

หวังว่ามันจะใช้ได้

JRequest :: รับ ( 'โพสต์');

สิ่งนี้จะช่วยคุณดึงข้อมูลจาก $ _POST ที่เทียบเท่ากันใน PHP


2
คำถามชัดเจนว่าวิธีนี้เลิกใช้แล้วดังนั้น OP กำลังมองหาวิธีการปรับปรุงโดยใช้ JInput
David Fritsch

@Harald คุณจะกำจัดคำตอบนี้ด้วยสิทธิพิเศษของคุณหรือไม่? ผู้ใช้รายนี้ดูเหมือนจะ "หายไปนาน"
mickmackusa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.