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