ThinkPHP 響應(yīng)輸出
1. 前言
本小節(jié)主要介紹 ThinkPHP 框架的響應(yīng)輸出,默認(rèn)輸出格式是 HTML
,下面分別介紹 html輸出
、模板渲染輸出
、JSON輸出
、xml輸出
,不同格式的輸出是需要結(jié)合業(yè)務(wù)場(chǎng)景的,不同的業(yè)務(wù)功能可能會(huì)需要返回不同的格式響應(yīng),主要是方便對(duì)接其他功能接口或者其他語(yǔ)言而設(shè)計(jì)的,在實(shí)際業(yè)務(wù)中 JSON
格式比較常見(jiàn)。
2. HTTP 狀態(tài)碼
HTTP 狀態(tài)碼
是用以表示網(wǎng)頁(yè)服務(wù)器超文本傳輸協(xié)議響應(yīng)狀態(tài)的 3 位數(shù)字代碼,下面列舉出幾種常見(jiàn)的 HTTP 狀態(tài)碼及含義:
響應(yīng)碼 | 含義描述 |
---|---|
100 Continue | 客戶端應(yīng)當(dāng)繼續(xù)發(fā)送請(qǐng)求,如果請(qǐng)求已經(jīng)完成,忽略這個(gè)響應(yīng)。服務(wù)器必須在請(qǐng)求完成后向客戶端發(fā)送一個(gè)最終響應(yīng)。 |
200 OK | 請(qǐng)求已成功,請(qǐng)求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回,出現(xiàn)此狀態(tài)碼是表示正常狀態(tài)。 |
201 Created | 請(qǐng)求已經(jīng)被實(shí)現(xiàn),而且有一個(gè)新的資源已經(jīng)依據(jù)請(qǐng)求的需要而建立。 |
301 Moved Permanently | 被請(qǐng)求的資源已永久移動(dòng)到新位置。 |
404 Not Found | 請(qǐng)求失敗,請(qǐng)求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)。 |
500 Internal Server Error | 服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況,服務(wù)器端的源代碼出現(xiàn)錯(cuò)誤時(shí)出現(xiàn)。 |
502 Bad Gateway | 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),從上游服務(wù)器接收到無(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í)通常使用的數(shù)據(jù)響應(yīng)格式為 JSON
,使用 json()
函數(shù)可以直接將數(shù)組內(nèi)容以 JSON
格式輸出:
public function get(){
$reArr = ["name"=>"愛(ài)因詩(shī)賢","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"=>"愛(ài)因詩(shī)賢","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
表示模板的路徑。
如上圖所示,會(huì)提示模板信息不存在,這時(shí)候需要在 view
目錄下新建對(duì)應(yīng)的 study.html
模板文件:
接下來(lái)就可以編寫(xiě) html
內(nèi)容了,這里為了演示方便只是一些簡(jiǎn)單的內(nèi)容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>歡迎來(lái)到慕課網(wǎng)的學(xué)習(xí)</h1>
<h2>我是愛(ài)因詩(shī)賢</h2>
<h3>每天堅(jiān)持學(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 = "愛(ài)因斯坦";
$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>歡迎來(lái)到{$title}的學(xué)習(xí)</h1>
<h2>我是{$name}</h2>
<h3>每天堅(jiān)持學(xué)習(xí){$book}</h3>
<h4>我的年齡是{$age}歲</h4>
<h5>天空是{$color}的</h5>
</body>
</html>
輸出內(nèi)容如下圖所示:
7. 小結(jié)
本小節(jié)介紹了幾種不同的請(qǐng)求狀態(tài)碼,不同的狀態(tài)對(duì)于請(qǐng)求客戶端來(lái)說(shuō)表示一種信號(hào),主要注意的是,實(shí)際開(kāi)發(fā)中需要嚴(yán)格按照規(guī)范來(lái)使用狀態(tài)碼。
另外還介紹了幾種不同的請(qǐng)求響應(yīng)輸出方式,模板渲染需要使用 composer
安裝 view
模板引擎模塊,這些不同響應(yīng)都有不同的應(yīng)用場(chǎng)景。如使用框架寫(xiě) api 接口時(shí)常用于 JSON
格式,有一些 APS
相關(guān)的接口使用的是 xml
,有時(shí)候想要快速開(kāi)發(fā)一些模板嵌套類(lèi)的應(yīng)用網(wǎng)站時(shí),模板渲染輸出是不錯(cuò)的選擇。
Tips: 代碼倉(cāng)庫(kù):https://gitee.com/love-for-poetry/tp6