由於各類緣由開始學習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文件夾