首頁  >  文章  >  php框架  >  thinkphp5 post不值怎麼辦

thinkphp5 post不值怎麼辦

藏色散人
藏色散人原創
2022-12-06 09:29:092109瀏覽

thinkphp5 post無法得到值是因為TP5是透過strpos函數在Header的content-type值中找出app/json字串的,其解決辦法就是設定Header的content-type值為app/json即可。

thinkphp5 post不值怎麼辦

本教學操作環境:Windows7系統、ThinkPHP5版、Dell G3電腦。

thinkphp5 post不值怎麼辦?

解決ThinkPHP5 無法接收客戶端Post 傳遞的Json 參數

這段時間在學習API 開發,從網路上搞了一個課程在跟著做,就在昨天我又一次碰到了講師一路暢通我半天調試的情況,遇到的問題是我用Postman 測試API 某Post 接口的時候無論怎麼發送請求總是提示我參數驗證失敗,在我調試的過程中某次採用透過Body 表傳遞參數的方法,API 神奇地通了,於是我判斷是之前Json 傳遞出了問題,就各種在網上搜,然而並沒有解決方法[不過Get 了兩個知識點放在文章結尾處]。

關於TP5 的問題度娘不行就只能查原始碼了,於是乎我就跟著錯誤一點一點的打斷點終於被我發現了問題所在~

#原來TP5 是透過strpos 函數在Header 的content-type 值中尋找app/json 字串,也就是說你必須設定Header 的content-type 值為app/json 才行,否則TP5 不會認為你傳入的是Json 參數並給Request::post 設為空。

以上就解決了 TP5 無法接收 用戶端 Post 傳遞的 Json 參數的問題。

兩個知識點:

  • content-type 為 "application/json" 的資料 php 是無法直接辨識的,所以導致 $_POST 陣列為空。解決方法:我們只要用$GLOBALS['HTTP_RAW_POST_DATA'] 把原始資料取出來,然後再json_decode 就行了[使用此方法,需要設定php.ini 中的always_populate_raw_post_data 值為On][$HTTP_PORAW_POST_DATA ,包含了原始資料的原始數據。但這不是一個超全局變量,要在函數中使用它,必須聲明為 global ,或使用 $GLOBALS['HTTP_RAW_POST_DATA'] 代替。 ];

  • 可以透過file_get_contents('php://input') 取代上面的方法直接取得到傳入的Json 參數[我在閱讀TP5 原始碼的時候發現他們也是用這個方法來取得的初始值]。

推薦學習:《thinkPHP影片教學

以上是thinkphp5 post不值怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn