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