ThinkPHP 控制器的使用

1. 前言

上一小节学习了如何定义 POSTGETPUTDELETE 四种路由请求方式,一般业务逻辑主要分为 控制器层模型层服务层视图层

本小节接着上节的内容介绍如何使用控制器,控制器一般是定义在路由中的,控制中的方法一般在项目中主要用于接口接收请求参数和返回响应数据的,然后比较复杂的业务逻辑一般都在 服务层模型层 处理。

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.phpImoocController 类,可以使用 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导出学生信息
后台处理数据