您好,登錄后才能下訂單哦!
這篇文章主要介紹解析Thinkphp5如何實現前后端分離,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
用Thinkphp5實現純API開發實現前后端分離
大致步驟如下
1.解決跨域請求問題
2.改變輸出數據格式為API常用返回JSON格式
3.自定義異常處理(修改適配API使用)
4.開始強制路由
解決跨域問題
找到 application\targs.php擴展定義文件,修改app_init的值
// 應用行為擴展定義文件 return [ // 應用初始化 'app_init' => [ 'app\api\Crossdomain\Cdom' ], // 應用開始 'app_begin' => [], // 模塊初始化 'module_init' => [], // 操作開始執行 'action_begin' => [], // 視圖內容過濾 'view_filter' => [], // 日志寫入 'log_write' => [], // 應用結束 'app_end' => [], ];
在application文件夾目錄下api\Crossdomain,在目錄下新建Cdom.php代碼文件,代碼如下
<?php namespace app\api\Crossdomain; class Cdom { public function appInit($params) { //配置IP白名單 在測試環境下可以為 * 號 生產環境下建議根據實際環境進行修改。 header('Access-Control-Allow-Origin: *'); header("Access-Control-Allow-Headers: token,Origin, X-Requested-With, X_Requested_With,Content-Type, Accept"); header('Access-Control-Allow-Methods: POST,GET,PUT'); if(request()->isOptions()){ exit(); } } }
改變輸出數據格式為API常用返回JSON格式
TP5默認輸出數據格式為HTML,顯然不符合常用API接口的數據規范,在此我們需要做相應的修改。找到application目錄下的config.php修改如下配置已避免每次都需要手動 json或者json_encode
// 默認輸出類型 'default_return_type' => 'json',
修改后返回數據時可直接返回如下
return ['code'=>1];
直接輸出json格式的數據
自定義異常處理(修改適配API使用)
TP5原有的異常處理機制如果做api接口的話會造成請求直接崩潰,在異常情況下API接口無法接收到正常的JSON數據而產生錯誤。為此我們需要自定義TP的異常處理機制。
找到application目錄下的config.php配置文件。修改如下選項為
'exception_handle' => 'app\api\Crossdomain\CdomHandle',
找到對應目錄,新增CdomHandle.php文件,添加如下代碼
<?php namespace app\api\Crossdomain; use think\exception\Handle; use think\Env; use Exception; use MyCLabs\Enum\Enum; class CdomHandle extends Handle { private $code = 999; private $msg; private $errCode; private $errFile = ''; private $errline = ''; private $errtrace = ''; private $errtracestring = ''; protected function getSourceCode(Exception $exception) { // 讀取前9行和后9行 $line = $exception->getLine(); $first = ($line - 9 > 0) ? $line - 9 : 1; try { $contents = file($exception->getFile()); $source = [ 'first' => $first, 'source' => array_slice($contents, $first - 1, 19), ]; } catch (Exception $e) { $source = ['code'=>1]; } return $source; } public function render(Exception $e) { $app_debug = Env::get('APP_DEBUG'); //如果是調試模式 if($app_debug) { $this->msg = $e->getMessage(); $this->errCode = $e->getCode(); $this->errFile = json($this->getSourceCode($e)); $this->errline = $e->getLine(); if(Env::get('APP_TRACE')) { $this->errtrace = $e->getTrace(); $this->errtracestring = $e->getTraceAsString(); } } else { $result = [ 'msg' => $e->getMessage(), 'errFile' => ($this->getSourceCode($e)), 'code' => 999, ]; return json($result); } return json([ 'code'=>$this->code, 'msg'=>$this->msg, 'errCode'=>$this->errCode, 'errFile'=>$this->errFile, 'errLine'=>$this->errline, 'errtrace'=>$this->errtrace, 'errtracestring'=>$this->errtracestring ]); } }
開啟強路由
// 是否開啟路由 'url_route_on' => true, // 路由使用完整匹配 'route_complete_match' => true, // 是否強制使用路由 'url_route_must' => true,
這里的Env用法請參考TP手冊
BaseException說明:https://docs.python.org/3.1/library/exceptions.html#BaseException
thinkphp屬于一種免費的開發框架,能夠用于開發前端網頁,最早thinkphp是為了簡化開發而產生的,thinkphp同時也是遵循Apache2協議,最初是從Struts演變過來,也把國外一些好的框架模式進行利用,使用面向對象的開發結構,兼容了很多標簽庫等模式,它能夠更方便和快捷的開發和部署應用,當然不僅僅是企業級應用,任何php應用開發都可以從thinkphp的簡單、兼容和快速的特性中受益。
以上是“解析Thinkphp5如何實現前后端分離”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。