ThinkPHP 控制器的使用
1. 前言
上一小節(jié)學(xué)習(xí)了如何定義 POST、GET、PUT、DELETE 四種路由請(qǐng)求方式,一般業(yè)務(wù)邏輯主要分為 控制器層、模型層、服務(wù)層、視圖層。
本小節(jié)接著上節(jié)的內(nèi)容介紹如何使用控制器,控制器一般是定義在路由中的,控制中的方法一般在項(xiàng)目中主要用于接口接收請(qǐng)求參數(shù)和返回響應(yīng)數(shù)據(jù)的,然后比較復(fù)雜的業(yè)務(wù)邏輯一般都在 服務(wù)層 和 模型層 處理。
2. 控制器的作用
按照 ThinkPHP 的架構(gòu)設(shè)計(jì),所有的 URL 請(qǐng)求(無(wú)論是否采用了路由),最終都會(huì)定位到控制器(也許實(shí)際的類不一定是控制器類,但也屬于廣義范疇的控制器)。
控制器的層可能有很多,為了便于區(qū)分就把通過(guò) URL 訪問的控制器稱之為訪問控制器(通常意義上我們所說(shuō)的控制器就是指訪問控制器)。ThinkPHP 的控制器定義比較靈活,可以無(wú)需繼承任何的基礎(chǔ)類,也可以根據(jù)業(yè)務(wù)需求封裝自己的基礎(chǔ)控制器類。
3. 定義控制器類
控制器文件通常放在 controller 目錄下面,類名和文件名保持大小寫一致,并采用駝峰命名(首字母大寫),一般控制器的名稱定義帶有 Controller 后綴,為了演示方便,這里在 study.php 路由文件先定義一個(gè) GET 路由,指向一個(gè)控制器:
Route::get('imooc', 'app\controller\Study\ImoocController@get');
如下圖所示:

Tips: 如上圖所示路由指向的控制器是
app\controller\Study目錄下的ImoocController控制器中的get方法。
接下來(lái)在 app\controller\Study 目錄下新建一個(gè)文件名是 ImoocController.php 的 ImoocController 類,可以使用 PhpStorm 軟件來(lái)創(chuàng)建,它可以自動(dòng)補(bǔ)上類名和命名空間:

在新彈出的窗口中輸入 ImoocController 即可完成創(chuàng)建:

Tips: 如果沒有
PhpStorm軟件則可以按照如圖所示的內(nèi)容編寫。
4. 控制器類繼承 BaseController 類
下載好的框架中,在 app 目錄中有一個(gè) BaseController,把它稱為基礎(chǔ)控制器,每次自定義的控制器可以繼承它,在 ImoocController 控制器類中使用 extends 繼承 BaseController:
<?php
namespace app\controller\Study;
use app\BaseController;
class ImoocController extends BaseController
{
}
如下圖所示:

Tips: 若
ImoocController類需要繼承BaseController基礎(chǔ)控制器,就需要使用use app\BaseController引用它。
5. BaseController 類介紹
首先打開 app 目錄下的 BaseController.php 文件,文件的內(nèi)容如下圖所示:

從打開的文件中可以看出,BaseController 類中包含有 請(qǐng)求實(shí)例($request)、應(yīng)用實(shí)例($app)、是否批量驗(yàn)證($batchValidate)、控制器中間件($middleware),初始化 initialize()、validate()。
其中請(qǐng)求實(shí)例($request)主要包含了一起請(qǐng)求過(guò)來(lái)的參數(shù)信息,應(yīng)用實(shí)例($app) 包含了容器相關(guān)的信息,初始化 initialize()表示在控制器中若要使用構(gòu)造函數(shù)請(qǐng)使用 initialize(),而不是 __constrcut(),然后 validate() 方法主要用驗(yàn)證請(qǐng)求過(guò)來(lái)的參數(shù)校驗(yàn)。
6. 定義方法
之前路由中定義了 get() 方法,需要在 ImoocController 控制器中定義,為了演示方便,這里定義如下:
public function get(){
$name = $this->request->param("name");
halt($name);
}
如下圖所示:

Tips: 我們可以看到
$request屬性中包含了請(qǐng)求參數(shù)的信息,halt()方法是tp框架中自帶一個(gè)打印方法,并且會(huì)結(jié)束程序繼續(xù)執(zhí)行。
然后我們可以用過(guò) postman 軟件工具來(lái)請(qǐng)求一下剛才定義的 study/imoo 路由,如下圖所示:

7. 小結(jié)
本小節(jié)介紹了 BaseController 基礎(chǔ)控制器類中的一些屬性和方法的作用,后續(xù)小結(jié)會(huì)繼續(xù)使用,還介紹了如何定義一個(gè)控制器類,并且將定義好的路由指向控制器。
需要注意的是本小節(jié)介紹的一種靈活的路由定義方法,實(shí)際工作中常用于寫項(xiàng)目接口,最后還介紹了如何通過(guò) postman 發(fā)起 GET 請(qǐng)求,然后通過(guò)控制器方法打印接收的參數(shù)。
Tips: 代碼倉(cāng)庫(kù)
Excel導(dǎo)入學(xué)生信息
Excel導(dǎo)出學(xué)生信息
后臺(tái)處理數(shù)據(jù)
愛因詩(shī)賢 ·
2025 imooc.com All Rights Reserved |