亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

ThinkPHP 響應輸出

1. 前言

本小節主要介紹 ThinkPHP 框架的響應輸出,默認輸出格式是 HTML,下面分別介紹 html輸出、模板渲染輸出、JSON輸出xml輸出,不同格式的輸出是需要結合業務場景的,不同的業務功能可能會需要返回不同的格式響應,主要是方便對接其他功能接口或者其他語言而設計的,在實際業務中 JSON 格式比較常見。

2. HTTP 狀態碼

HTTP 狀態碼是用以表示網頁服務器超文本傳輸協議響應狀態的 3 位數字代碼,下面列舉出幾種常見的 HTTP 狀態碼及含義:

響應碼 含義描述
100 Continue 客戶端應當繼續發送請求,如果請求已經完成,忽略這個響應。服務器必須在請求完成后向客戶端發送一個最終響應。
200 OK 請求已成功,請求所希望的響應頭或數據體將隨此響應返回,出現此狀態碼是表示正常狀態。
201 Created 請求已經被實現,而且有一個新的資源已經依據請求的需要而建立。
301 Moved Permanently 被請求的資源已永久移動到新位置。
404 Not Found 請求失敗,請求所希望得到的資源未被在服務器上發現。
500 Internal Server Error 服務器遇到了一個未曾預料的狀況,服務器端的源代碼出現錯誤時出現。
502 Bad Gateway 作為網關或者代理工作的服務器嘗試執行請求時,從上游服務器接收到無效的響應。

3. html 響應

ThinkPHP 框架默認輸出是 html 格式,如果你只需要輸出 html 格式,可以使用 response() 函數,或者直接返回字符串:

<?php


namespace app\controller\Study;


use app\BaseController;

class ImoocController extends BaseController
{
    public function get()
    {
        $htmlStr = "<h1>這是HTML H1 標簽</h1><h2>這是HTML H2 標簽</h2><h3>這是HTML H3 標簽</h3><h4>這是HTML H4 標簽</h4>";
        return response($htmlStr);
    }
}

Tips: 路由定義是 Route::get('imooc', 'app\controller\Study\ImoocController@get');;

輸出內容如下圖所示:
圖片描述
也可以直接返回 html 字符串響應的結果和上面一致:

    public function get()
    {
        $htmlStr = "<h1>這是HTML H1 標簽</h1><h2>這是HTML H2 標簽</h2><h3>這是HTML H3 標簽</h3><h4>這是HTML H4 標簽</h4>";
        return $htmlStr;
    }

4. json 響應

當給客戶端提供 api 接口時通常使用的數據響應格式為 JSON,使用 json() 函數可以直接將數組內容以 JSON 格式輸出:

    public function get(){
        $reArr = ["name"=>"愛因詩賢","age"=>18,"weight"=>65,"title" => "慕課網 ThinkPHP"];
       return json($reArr);
    }

輸出內容如下圖所示:
圖片描述

json 函數默認的響應碼是 200,如下代碼可以給返回的 JSON 數據帶上指定的 HTTP 響應碼:

    public function get()
    {
        $height = $this->request->param('height', 0, 'intval');
        if ($height == 0) {
            return json("身高參數不合法", 404);
        }
    }

輸出內容如下圖所示:
圖片描述

Tips: json("身高參數不合法", 404) 第二參數 404 表示返回指定的 HTTP 狀態碼。

5. xml 響應

使用 xml() 函數可以直接將數組內容以 xml 格式輸出:

    public function get(){
        $reArr = ["name"=>"愛因詩賢","age"=>18,"weight"=>65,"title" => "慕課網 ThinkPHP"];
       return xml($reArr);
    }

輸出內容如下圖所示:
圖片描述

6. 模板渲染響應

6.1 安裝模板引擎模塊

使用模板引擎需要加載 view 模塊,使用如下 composer 命令即可安裝模板引擎模塊:

Composer require topthink/think-view

安裝視頻如下:

6.2 調用模板引擎輸出

使用模板引擎需要加載 use think\facade\View ,然后使用 View::fetch() 即可調用模板輸出了:

<?php


namespace app\controller\Study;


use app\BaseController;
use think\facade\View;

class ImoocController extends BaseController
{
    public function get()
    {
        return View::fetch('imooc/study');
    }
}

輸出內容如下圖所示:
圖片描述

Tips: 其中 imooc/study 表示模板的路徑。

如上圖所示,會提示模板信息不存在,這時候需要在 view 目錄下新建對應的 study.html 模板文件:
圖片描述
接下來就可以編寫 html 內容了,這里為了演示方便只是一些簡單的內容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>歡迎來到慕課網的學習</h1>
<h2>我是愛因詩賢</h2>
<h3>每天堅持學習《數據結構和算法》</h3>
<h4>我的年齡是18</h4>
<h5>天空是藍色的</h5>
</body>
</html>

輸出內容如下圖所示:
圖片描述

6.3 模板變量

若想要在模板中嵌套變量,可以使用 View:assign() 方法:

    public function get()
    {
        $title = "imooc";
        $name = "愛因斯坦";
        $book = "《深入理解 Nginx》";
        $age = 99;
        $color = "灰色";
        View::assign('title', $title);
        View::assign('name', $name);
        View::assign('book', $book);
        View::assign('age', $age);
        View::assign('color', $color);
        return View::fetch('imooc/study');
    }

下面是模板變量的表示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>歡迎來到{$title}的學習</h1>
<h2>我是{$name}</h2>
<h3>每天堅持學習{$book}</h3>
<h4>我的年齡是{$age}</h4>
<h5>天空是{$color}</h5>
</body>
</html>

輸出內容如下圖所示:
圖片描述

7. 小結

本小節介紹了幾種不同的請求狀態碼,不同的狀態對于請求客戶端來說表示一種信號,主要注意的是,實際開發中需要嚴格按照規范來使用狀態碼。

另外還介紹了幾種不同的請求響應輸出方式,模板渲染需要使用 composer 安裝 view 模板引擎模塊,這些不同響應都有不同的應用場景。如使用框架寫 api 接口時常用于 JSON 格式,有一些 APS 相關的接口使用的是 xml,有時候想要快速開發一些模板嵌套類的應用網站時,模板渲染輸出是不錯的選擇。

Tips: 代碼倉庫:https://gitee.com/love-for-poetry/tp6