ThinkPHP 響應(yīng)輸出
1. 前言
本小節(jié)主要介紹 ThinkPHP 框架的響應(yīng)輸出,默認(rèn)輸出格式是 HTML,下面分別介紹 html輸出、模板渲染輸出、JSON輸出、xml輸出,不同格式的輸出是需要結(jié)合業(yè)務(wù)場景的,不同的業(yè)務(wù)功能可能會需要返回不同的格式響應(yīng),主要是方便對接其他功能接口或者其他語言而設(shè)計的,在實(shí)際業(yè)務(wù)中 JSON 格式比較常見。
2. HTTP 狀態(tài)碼
HTTP 狀態(tài)碼是用以表示網(wǎng)頁服務(wù)器超文本傳輸協(xié)議響應(yīng)狀態(tài)的 3 位數(shù)字代碼,下面列舉出幾種常見的 HTTP 狀態(tài)碼及含義:
| 響應(yīng)碼 | 含義描述 |
|---|---|
| 100 Continue | 客戶端應(yīng)當(dāng)繼續(xù)發(fā)送請求,如果請求已經(jīng)完成,忽略這個響應(yīng)。服務(wù)器必須在請求完成后向客戶端發(fā)送一個最終響應(yīng)。 |
| 200 OK | 請求已成功,請求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回,出現(xiàn)此狀態(tài)碼是表示正常狀態(tài)。 |
| 201 Created | 請求已經(jīng)被實(shí)現(xiàn),而且有一個新的資源已經(jīng)依據(jù)請求的需要而建立。 |
| 301 Moved Permanently | 被請求的資源已永久移動到新位置。 |
| 404 Not Found | 請求失敗,請求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)。 |
| 500 Internal Server Error | 服務(wù)器遇到了一個未曾預(yù)料的狀況,服務(wù)器端的源代碼出現(xiàn)錯誤時出現(xiàn)。 |
| 502 Bad Gateway | 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請求時,從上游服務(wù)器接收到無效的響應(yīng)。 |
3. html 響應(yīng)
ThinkPHP 框架默認(rèn)輸出是 html 格式,如果你只需要輸出 html 格式,可以使用 response() 函數(shù),或者直接返回字符串:
<?php
namespace app\controller\Study;
use app\BaseController;
class ImoocController extends BaseController
{
public function get()
{
$htmlStr = "<h1>這是HTML H1 標(biāo)簽</h1><h2>這是HTML H2 標(biāo)簽</h2><h3>這是HTML H3 標(biāo)簽</h3><h4>這是HTML H4 標(biāo)簽</h4>";
return response($htmlStr);
}
}
Tips: 路由定義是
Route::get('imooc', 'app\controller\Study\ImoocController@get');;
輸出內(nèi)容如下圖所示:

也可以直接返回 html 字符串響應(yīng)的結(jié)果和上面一致:
public function get()
{
$htmlStr = "<h1>這是HTML H1 標(biāo)簽</h1><h2>這是HTML H2 標(biāo)簽</h2><h3>這是HTML H3 標(biāo)簽</h3><h4>這是HTML H4 標(biāo)簽</h4>";
return $htmlStr;
}
4. json 響應(yīng)
當(dāng)給客戶端提供 api 接口時通常使用的數(shù)據(jù)響應(yīng)格式為 JSON,使用 json() 函數(shù)可以直接將數(shù)組內(nèi)容以 JSON 格式輸出:
public function get(){
$reArr = ["name"=>"愛因詩賢","age"=>18,"weight"=>65,"title" => "慕課網(wǎng) ThinkPHP"];
return json($reArr);
}
輸出內(nèi)容如下圖所示:

json 函數(shù)默認(rèn)的響應(yīng)碼是 200,如下代碼可以給返回的 JSON 數(shù)據(jù)帶上指定的 HTTP 響應(yīng)碼:
public function get()
{
$height = $this->request->param('height', 0, 'intval');
if ($height == 0) {
return json("身高參數(shù)不合法", 404);
}
}
輸出內(nèi)容如下圖所示:

Tips:
json("身高參數(shù)不合法", 404)第二參數(shù)404表示返回指定的 HTTP 狀態(tài)碼。
5. xml 響應(yīng)
使用 xml() 函數(shù)可以直接將數(shù)組內(nèi)容以 xml 格式輸出:
public function get(){
$reArr = ["name"=>"愛因詩賢","age"=>18,"weight"=>65,"title" => "慕課網(wǎng) ThinkPHP"];
return xml($reArr);
}
輸出內(nèi)容如下圖所示:

6. 模板渲染響應(yīng)
6.1 安裝模板引擎模塊
使用模板引擎需要加載 view 模塊,使用如下 composer 命令即可安裝模板引擎模塊:
Composer require topthink/think-view
安裝視頻如下:
6.2 調(diào)用模板引擎輸出
使用模板引擎需要加載 use think\facade\View ,然后使用 View::fetch() 即可調(diào)用模板輸出了:
<?php
namespace app\controller\Study;
use app\BaseController;
use think\facade\View;
class ImoocController extends BaseController
{
public function get()
{
return View::fetch('imooc/study');
}
}
輸出內(nèi)容如下圖所示:

Tips: 其中
imooc/study表示模板的路徑。
如上圖所示,會提示模板信息不存在,這時候需要在 view 目錄下新建對應(yīng)的 study.html 模板文件:

接下來就可以編寫 html 內(nèi)容了,這里為了演示方便只是一些簡單的內(nèi)容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>歡迎來到慕課網(wǎng)的學(xué)習(xí)</h1>
<h2>我是愛因詩賢</h2>
<h3>每天堅持學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)和算法》</h3>
<h4>我的年齡是18歲</h4>
<h5>天空是藍(lán)色的</h5>
</body>
</html>
輸出內(nèi)容如下圖所示:

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}的學(xué)習(xí)</h1>
<h2>我是{$name}</h2>
<h3>每天堅持學(xué)習(xí){$book}</h3>
<h4>我的年齡是{$age}歲</h4>
<h5>天空是{$color}的</h5>
</body>
</html>
輸出內(nèi)容如下圖所示:

7. 小結(jié)
本小節(jié)介紹了幾種不同的請求狀態(tài)碼,不同的狀態(tài)對于請求客戶端來說表示一種信號,主要注意的是,實(shí)際開發(fā)中需要嚴(yán)格按照規(guī)范來使用狀態(tài)碼。
另外還介紹了幾種不同的請求響應(yīng)輸出方式,模板渲染需要使用 composer 安裝 view 模板引擎模塊,這些不同響應(yīng)都有不同的應(yīng)用場景。如使用框架寫 api 接口時常用于 JSON 格式,有一些 APS 相關(guān)的接口使用的是 xml,有時候想要快速開發(fā)一些模板嵌套類的應(yīng)用網(wǎng)站時,模板渲染輸出是不錯的選擇。
Tips: 代碼倉庫:https://gitee.com/love-for-poetry/tp6
愛因詩賢 ·
2025 imooc.com All Rights Reserved |