PHP: thinkPHP踩坑記錄(實現API接口以及處理莫名其妙的500問題)

由於各類緣由開始學習PHP,而且要在兩週內可以對PHP項目進行二次開發,還好PHP夠簡單,至少入門很簡單,很快就接觸thinkPHP框架.php

在瞭解了路由匹配視圖的規則以後,開始着手嘗試編寫API接口,期間因爲沒有好好查看官方的命名規範文檔,致使出了些沒必要要的錯誤.前端

命名規範文檔: https://www.kancloud.cn/manual/thinkphp5/118007ajax

目前發現的可以輸出json數據的關鍵字有兩個:thinkphp

return   返回數據數據庫

exit       返回並退出(結束進程)json

開發先後端分離開發中,GET請求比較好處理,經過 $_GET變量能夠直接拿到查詢字符串參數, 可是AJAX 的 請求體發送 json 數據不能經過 $_POST變量拿到, 聽說該變量只能接受網頁方式傳遞的表單數據.後端

想拿到ajax 傳遞的 json數據能夠經過  瀏覽器

file_get_contents('php://input')

方式拿到,可是拿到的是字符串形式的json,須要解析:app

json_decode(file_get_contents('php://input'))

PHP提供一個Json類能夠直接響應json格式的數據, 也能夠經過 exit(json)的方式來輸出json數據,只是exit執行以後會結束整個進程,這裏須要注意.框架

另外因爲exit函數接受的是字符串形式的參數,因此須要手動修改響應頭:

1 header('Content-Type:application/json; charset=utf-8'); 2 exit(json_encode(json);

因此我就能夠寫一個基類了:

 1 <?php  2 namespace app\commonBase\controller;  3 
 4 class BaseController  5 {  6     protected function responseJson($code=200, $msg="success", $data=[], $status=200) {  7         $resp = array('code'=>$code, 'msg'=>$msg, 'data'=>$data);  8 
 9         // 返回JSON數據格式到客戶端 包含狀態信息
10         header('Content-Type:application/json; charset=utf-8'); 11         return json($resp, $status); 12  } 13 
14     // 解析 ajax 請求體數據
15     protected function ajaxJsonData() { 16         return json_decode(file_get_contents('php://input')); 17  } 18     
19     // 獲取請求體數據
20     protected function bodyParams($key='') { 21         $body = $this->ajaxJsonData(); 22         if (isset($body[$key])) { 23             return $body[$key]; 24         } else { 25             return null; 26  } 27  } 28 
29     // 解析查詢字符串數據
30     protected function queryParams($key='') { 31         if (isset($_GET[$key])) { 32             return $_GET[$key]; 33         } else { 34             return null; 35  } 36  } 37 }

 

多是受Python的框架風格影響較深,總喜歡將後臺業務代碼再進行細化, 具體的數據庫操做,請求數據解析,權限管理等邏輯進行分離, 方便管理和維護.

 

除了上面的問題以外,還有一個很詭異的問題,就是個人接口運行正常,也能正常響應,可是前端瀏覽器顯示狀態碼爲 500;

找了下網上的資料,發現時日誌寫入權限的問題,查看了下Apache運行日誌:

問題出在這個位置:

第46行,若是路徑不是目錄,則建立目錄,目錄名什麼的能夠到源代碼裏面去找:

把這個文件夾的寫入權限加上就能夠了.

public/runtime文件夾

相關文章
相關標籤/搜索