您好,登錄后才能下訂單哦!
這篇文章主要介紹了thinkphp5 post得不到值如何解決的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇thinkphp5 post得不到值如何解決文章都會有所收獲,下面我們一起來看看吧。
thinkphp5 post得不到值是因為TP5是通過strpos函數在Header的content-type值中查找app/json字符串的,其解決辦法就是設置Header的content-type值為app/json即可。
解決 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_RAW_POST_DATA ,包含了 POST 的原始數據。但這不是一個超全局變量,要在函數中使用它,必須聲明為 global ,或使用 $GLOBALS['HTTP_RAW_POST_DATA'] 代替。];
可以通過 file_get_contents('php://input') 代替上面的方法直接獲取到傳入的 Json 參數[我在閱讀 TP5 源碼的時候發現他們也是用這個方法來獲取的初始值]。
thinkphp屬于一種免費的開發框架,能夠用于開發前端網頁,最早thinkphp是為了簡化開發而產生的,thinkphp同時也是遵循Apache2協議,最初是從Struts演變過來,也把國外一些好的框架模式進行利用,使用面向對象的開發結構,兼容了很多標簽庫等模式,它能夠更方便和快捷的開發和部署應用,當然不僅僅是企業級應用,任何php應用開發都可以從thinkphp的簡單、兼容和快速的特性中受益。
關于“thinkphp5 post得不到值如何解決”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“thinkphp5 post得不到值如何解決”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。