ThinkPHP 控制器的使用
1. 前言
上一小節(jié)學(xué)習(xí)了如何定義 POST
、GET
、PUT
、DELETE
四種路由請求方式,一般業(yè)務(wù)邏輯主要分為 控制器層
、模型層
、服務(wù)層
、視圖層
。
本小節(jié)接著上節(jié)的內(nèi)容介紹如何使用控制器,控制器一般是定義在路由中的,控制中的方法一般在項目中主要用于接口接收請求參數(shù)和返回響應(yīng)數(shù)據(jù)的,然后比較復(fù)雜的業(yè)務(wù)邏輯一般都在 服務(wù)層
和 模型層
處理。
2. 控制器的作用
按照 ThinkPHP 的架構(gòu)設(shè)計,所有的 URL 請求(無論是否采用了路由),最終都會定位到控制器(也許實際的類不一定是控制器類,但也屬于廣義范疇的控制器)。
控制器的層可能有很多,為了便于區(qū)分就把通過 URL 訪問的控制器稱之為訪問控制器(通常意義上我們所說的控制器就是指訪問控制器)。ThinkPHP 的控制器定義比較靈活,可以無需繼承任何的基礎(chǔ)類,也可以根據(jù)業(yè)務(wù)需求封裝自己的基礎(chǔ)控制器類。
3. 定義控制器類
控制器文件通常放在 controller
目錄下面,類名和文件名保持大小寫一致,并采用駝峰命名(首字母大寫),一般控制器的名稱定義帶有 Controller
后綴,為了演示方便,這里在 study.php
路由文件先定義一個 GET
路由,指向一個控制器:
Route::get('imooc', 'app\controller\Study\ImoocController@get');
如下圖所示:
Tips: 如上圖所示路由指向的控制器是
app\controller\Study
目錄下的ImoocController
控制器中的get
方法。
接下來在 app\controller\Study
目錄下新建一個文件名是 ImoocController.php
的 ImoocController
類,可以使用 PhpStorm
軟件來創(chuàng)建,它可以自動補上類名和命名空間:
在新彈出的窗口中輸入 ImoocController
即可完成創(chuàng)建:
Tips: 如果沒有
PhpStorm
軟件則可以按照如圖所示的內(nèi)容編寫。
4. 控制器類繼承 BaseController 類
下載好的框架中,在 app
目錄中有一個 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
類中包含有 請求實例($request)
、應(yīng)用實例($app)
、是否批量驗證($batchValidate)
、控制器中間件($middleware)
,初始化 initialize()
、validate()
。
其中請求實例($request)
主要包含了一起請求過來的參數(shù)信息,應(yīng)用實例($app)
包含了容器相關(guān)的信息,初始化 initialize()
表示在控制器中若要使用構(gòu)造函數(shù)請使用 initialize()
,而不是 __constrcut()
,然后 validate()
方法主要用驗證請求過來的參數(shù)校驗。
6. 定義方法
之前路由中定義了 get()
方法,需要在 ImoocController
控制器中定義,為了演示方便,這里定義如下:
public function get(){
$name = $this->request->param("name");
halt($name);
}
如下圖所示:
Tips: 我們可以看到
$request
屬性中包含了請求參數(shù)的信息,halt()
方法是tp
框架中自帶一個打印方法,并且會結(jié)束程序繼續(xù)執(zhí)行。
然后我們可以用過 postman
軟件工具來請求一下剛才定義的 study/imoo
路由,如下圖所示:
7. 小結(jié)
本小節(jié)介紹了 BaseController
基礎(chǔ)控制器類中的一些屬性和方法的作用,后續(xù)小結(jié)會繼續(xù)使用,還介紹了如何定義一個控制器類,并且將定義好的路由指向控制器。
需要注意的是本小節(jié)介紹的一種靈活的路由定義方法,實際工作中常用于寫項目接口,最后還介紹了如何通過 postman
發(fā)起 GET
請求,然后通過控制器方法打印接收的參數(shù)。
Tips: 代碼倉庫
Excel導(dǎo)入學(xué)生信息
Excel導(dǎo)出學(xué)生信息
后臺處理數(shù)據(jù)