亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

解析Thinkphp5如何實現前后端分離

發布時間:2021-05-21 09:24:29 來源:億速云 閱讀:303 作者:小新 欄目:編程語言

這篇文章主要介紹解析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是為了簡化開發而產生的,thinkphp同時也是遵循Apache2協議,最初是從Struts演變過來,也把國外一些好的框架模式進行利用,使用面向對象的開發結構,兼容了很多標簽庫等模式,它能夠更方便和快捷的開發和部署應用,當然不僅僅是企業級應用,任何php應用開發都可以從thinkphp的簡單、兼容和快速的特性中受益。

以上是“解析Thinkphp5如何實現前后端分離”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大名县| 永济市| 恩施市| 漳州市| 通城县| 吉木乃县| 英超| 乐陵市| 马边| 闸北区| 南木林县| 林西县| 松溪县| 潍坊市| 施甸县| 永宁县| 府谷县| 广汉市| 叙永县| 肇庆市| 安岳县| 革吉县| 石屏县| 武宣县| 平潭县| 庄河市| 海淀区| 台南县| 盈江县| 文水县| 贵德县| 河南省| 乌兰县| 绥芬河市| 紫阳县| 凭祥市| 正宁县| 临沂市| 石棉县| 桃园县| 特克斯县|