服务端

目录

├─📂 server  //服务端根目录(管理后台、接口)
│  ├─📂 app  //应用目录
│  │  ├─📂 adminapi  //管理后台接口
│  │  │  ├─📂config //配置
│  │  │  ├─📂controller //控制器
│  │  │  ├─📂http
│  │  │  │  ├─📂middleware //中间件
│  │  │  ├─📂listener //事件监听
│  │  │  ├─📂lists //列表类
│  │  │  ├─📂logic //逻辑类
│  │  │  ├─📂service //服务类
│  │  │  ├─📂validate //验证类
│
│  ├─📂 public  //WEB目录(对外访问目录)
│  │  ├─📄 index.php  //php入口文件
│  │  ├─📂 admin  //已编译的后台前端代码入口(上线运行)
│  │  ├─📂 install  //安装程序目录
│  ├─📄 .env  //项目环境配置文件(最优化读取配置)

运行流程

likadmin使用前后端分离,服务端只提供数据接口,默认访问方式为 "http://域名/模块名称/控制器名称/控制器方法"。
代码执行流程如下,先根据接口url找到模块,进入模块中间件,中间件顺序在adminapi/config/route.php中配置。
然后进入控制器,一般控制器类型为查看数据的操作,不会有验证类,数据提交类型有验证类。
接着按需求执行逻辑层或列表类或服务层,然后返回结果。
这样就完成这个访问流程,下面会针对每个步骤详细讲解。

接口请求-->进入模块 --> 中间件 --> 控制器 --> [验证类 --> 逻辑层\列表类\服务层] --> 返回结果

模块

根据thinkphp开发规范,一般模块放在server/app目录下,根据业务定义模块。likeadmin目前针对管理后台定义server/app/adminapi模块,后续会小程序模块等。

中间件

中间件配置在adminapi/config/route.php文件,按顺序运行初始化中间件,登录验证中间件,权限认证中间件。

初始化

初始化中间件路径为http/middleware/InitMiddleware.php,用于模块是初始化,一般情况下不需求修改。

登录验证

登录验证中间件路径为adminapi/http/middleware/LoginMiddleware.php,用于验证用户是否登录,登录的用户会在请求的header里面放有效的token参数,通过token参数可以知道用户信息,这些信息可以在控制器等其他地方使用。
有这些接口是不需要验证用户是否登录(比如登录接口),可以在控制器中设置,参考控制器相当关文档。

<?php
namespace app\adminapi\controller;
class LoginController extends BaseAdminController
{
    public array $notNeedLogin = ['account', 'logout'];
    public function account(){}
    public function logout(){}
}

权限认证

权限认证的中间件路径为adminapi/http/middleware/AuthMiddleware.php,用户验证登录账号的角色是否拥有该接口的访问权限。

控制器

访问

控制器目录在【模块/controller】,可以直接在controller目录新增控制器类,访问为"http://域名/模块/控制器类名称/控制器方法",也可以在controller再新建控制器目录,再新建控制器,访问为"http://域名/模块/控制器目录.控制器名称/控制器方法"。

继承

一般情况下,控制器需要继承模块的基础控制器。
管理后台模块的控制器继承BaseAdminController控制器,用户登录状态下,可以通过$this->adminId获取管理员id,$this->adminInfo获取管理员信息。

<?php
namespace app\adminapi\controller;

use app\adminapi\controller\BaseAdminController;

class TestController extends BaseAdminController
{
    //登录接口
    public function index()
    {
        $this->adminId; //管理员id
        $this->adminInfo; //管理员属性
    }
}

登录

默认情况下,控制器方法需要登录才能访问。也可以设置控制器的$notNeedLogin属性,增加多个不需要登录验证的控制器方法名称。

<?php
namespace app\adminapi\controller;

use app\adminapi\controller\BaseAdminController;

class LoginController extends BaseAdminController
{
    public array $notNeedLogin = ['account', 'logout'];
    
    //登录接口
    public function account()
    {
        //……
    }
     
    //退出登录接口
    public function logout()
    {
        //……
    } 
}

响应

为了规范接口返回值,接口的数据格式与前端约定,格式和说明如下。

{
    "code": 1,
    "show": 0,
    "msg": "",
    "data": {
        "lists": [],
        "count": 0,
        "page_no": 1,
        "page_size": 15,
        "extend": []
    }
}
字段名称类型必显说明
code状态码int1-业务正常;0-业务验证不通过
show提示状态int1-显示提示语内容;0-不显示提示内容
msg提示语string轻弹窗出提示
data数据object业务数据
- list列表数组array数据列表数组内容
- count记录数int数据列表总记录数
- page_no页面序号int当前页序号
- page_size每页记录数int当前每页记录数
- extend额外参数array额外参数,根据需要使用

接口返回一般会使用控制器的几个方法。success方法表示业务正常,也可以用于返回接口数据。data方法用于返回数据。dataLists方法专门用于返回列表数据,包含列表导出。

方法名称调用说明参数
success()返回业务正常或数据$msg:提示语;$data:数据;$code:状态码;$show:提示语
data()返回数据$data:数据
lists()返回列表数据$lists: 列表类
fail()返回数据$msg:提示语;验证码 拦截后会自动处理,一般情况下不需要使用
<?php
namespace app\adminapi\controller;

use app\adminapi\controller\BaseAdminController;

class TestController extends BaseAdminController
{
    //登录接口
    public function index()
    {
        return $this->success();//成功
        return $this->fail(); //失败
        return $this->data(); //返回数据
        return $this->dataLists(); //返回数据列表
    }
}

验证类

列表类

上次更新:
贡献者: lr