首页 » 编程语言 » 正文

ThinkPHP 快速开发 RESTFul 接口

在一个基本的 ThinkPHP 开发环境启动成功以后,还要对 PHP 的配置文件、ThinkPHP 框架的数据库连接配置做一些改变,才能进行 RESTFul 接口的开发。ThinkPHP 开发环境搭建方法请参考 https://blog.yanand.tech/archives/150.html

PHP 配置

ThinkPHP 应用要访问数据库,要在 PHP 中开启数据库扩展,打开 D:\DevTools\php-7.4.1\php.ini 文件,找到如下两个配置,去掉前面的注释:

extension=mysqli
extension=pdo_mysql

ThinkPHP 数据库配置

创建数据库和建表的过程这里不再描述,我创建好的数据名为 qanmi,表名为 user,表中主要有三个字段 id,name,age。

到工程目录下,例如我的是 D:\E\Workspace\php\tp 找到 .example.env 文件,复制一份重命名为 .env,打开 .env 修改数据库配置为自己创建好的数据库配置。

[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = qanmi
USERNAME = your_username
PASSWORD = your_password

生成接口代码

ThinkPHP 提供了自动生成部分代码的功能,命令提示符定位到工程目录,输入命令来生成代码。

D:\E\Workspace\php\tp>php think make:controller User --api
Controller:app\controller\User created successfully.

D:\E\Workspace\php\tp>php think make:model User
Model:app\model\User created successfully.

这时一共生成了两个 User.php 文件,controller 下面的用来编写接口,model 下面的用来编写模型。模型中不需要再写任何的代码,它已经提供了对数据库基本的增删改查操作,controller 中调用模型数据库的操作还需要自行编写。以下是我编写的 controller 代码。

use app\model\User as UserModel;
class User
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        return UserModel::field('id,name,age,create_time')->select();
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        $data = $request->only(['name','age']);
        UserModel::create($data);
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        return UserModel::field('id,name,age,create_time')->find($id);
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        $data = $request->only(['name','age']);
        UserModel::update($data, ['id' => $id]);
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        UserModel::destroy($id);
    }
}

controller 编写完成后需要将它注册到路由中,打开 \route\app.php 文件,加入资源路由声明。

Route::resource('user', 'User');

表示注册了一个名称为 user 的资源路由到 User 控制器,系统会自动注册5个路由规则,如下:

标识请求类型生成路由规则对应操作方法(默认)
indexGETuserindex
savePOSTusersave
readGETuser/:idread
updatePUTuser/:idupdate
deleteDELETEuser/:iddelete
路由规则

测试接口

使用 Postman 测试查询接口 http://localhost:8000/user/25