Apabila saya menggunakan ThinkPHP untuk membangunkan projek baru-baru ini, saya menghadapi masalah: selepas menyerahkan borang, data siaran tidak dapat diperoleh. Ini adalah masalah biasa semasa proses pembangunan kadang-kadang kita akan berasa sangat keliru, terutamanya apabila kita telah menemui banyak kaedah di Internet dan masih tidak dapat menyelesaikan masalah tersebut. Artikel ini akan memperkenalkan secara ringkas cara menyelesaikan masalah ini.
1. Masalah
Selepas menyerahkan borang, data pos tidak boleh diperolehi melalui permintaan->param() atau $this->request->param(). yang diperolehi ialah Empty array.
2. Punca masalah
Apabila borang diserahkan, jika atribut enctype ialah tidak ditetapkan, maka penghantaran data lalai Kaedahnya adalah aplikasi/x-www-form-urlencoded. Pada masa ini, data siaran akan diletakkan dalam pengepala permintaan http dan bukannya badan permintaan. Oleh itu, apabila mendapatkan data siaran, kita perlu menggunakan $this->request->post() atau request()->post().
Apabila memanggil antara muka, kita perlu menetapkan pengepala permintaan yang sepadan, seperti Content-Type: application/json , jika tidak pelayan tidak boleh Menghuraikan data. Jika Jenis Kandungan tidak ditetapkan, pelayan lalai kepada application/x-www-form-urlencoded, dan pada masa ini data pos akan diletakkan dalam pengepala permintaan http dan bukannya badan permintaan, mengakibatkan ketidakupayaan untuk mendapatkan data pos dengan betul.
3. Penyelesaian
Tambah enctype="multipart/form-data" pada borang supaya ia boleh diperolehi menyiarkan data dengan betul.
Apabila memanggil antara muka, anda boleh menggunakan curl untuk menetapkan pengepala permintaan. Kod sampel adalah seperti berikut:
$data = array( 'username' => 'admin', 'password' => '123456' ); $url = 'http://www.example.com/login'; $ch = curl_init(); $header = array( 'Content-Type: application/json', 'Content-Length: '.strlen(json_encode($data)) ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($ch); curl_close($ch);
4. Ringkasan
Kegagalan mendapatkan data pos adalah masalah biasa Keadaan ini biasanya disebabkan oleh kaedah penghantaran data yang salah atau tetapan pengepala permintaan. daripada. Jika anda menghadapi masalah ini, anda boleh menyelesaikannya satu persatu mengikut kaedah di atas Sudah tentu anda juga boleh menggunakan kaedah lain, seperti menggunakan php://input atau $_POST untuk mendapatkan data pos. Akhir sekali, saya berharap artikel ini dapat menyelesaikan masalah yang sama yang dihadapi oleh pembaca semasa proses pembangunan.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah yang thinkphp tidak boleh mendapatkan data pos. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!