# 后端文档
# 开发规范
TIP
代码逻辑调用规则 控制器(Controller)->业务服务(Service)->数据访问映射(Mapper)->模型(Models) 接口功能基本遵循以上规则,其实就是每个功能基本是4个文件支持。
当然你也可以不遵循这样的约定,直接在控制器调用模型实现功能。
MineAdmin
数据表主键使用了雪花算法
,并且主键使用的为bigint
类型。- 如果你想使用自增ID,完全不影响使用。
# 路由命名规范
MineAdmin 路由只使用
注解路由
,所以请勿使用配置文件形式来注册路由
类路由使用 @Controller
方法路由使用具体各个实际请求方法的注解
@PostMapping
POST请求路由注解@GetMapping
GET请求路由注解@DeleteMapping
DELETE请求路由注解@PutMapping
PUT请求路由注解- 其他请求注解方式请参考
hyperf
官方文档
路由命名规范为:模块名/业务名/操作名
例如,有一个系统模块,下面有个用户管理业务,要请求用户列表,那么应如此定义
/**
* 系统模块下的用户业务,控制器定义路由
* @Controller(prefix="system/user")
* @Auth
*/
class UserController extends MineController
{
/**
* 定义操作路由
* @GetMapping("index")
*/
public function index()
{
// TODO...
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
那么他的访问地址既是 system/user/index
TIP
整个系统的路由定义规范皆是如此,尽量遵守约定,可以减少项目后续中的麻烦。
# 控制器层
因为是后台管理系统,控制器必须要继承 MineController
。若是写前台或者其他方面,则不需要继承
class FooController extends MineController {
//TODO...
}
1
2
3
2
3
控制器引入业务的 Service
,可以使用 @Inject
注解自动注入
/**
* 示例
* @Controller(prefix="demo/foo")
*/
class FooController extends MineController {
/**
* @Inject
* @var DemoService
*/
protected $service;
/**
* 请求列表数据
* @GetMapping("index")
*/
public function index(): ResponseInterface
{
return $this->success($this->service->getPageList($this->request->all()));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 业务服务层
业务服务层也叫业务逻辑层,是对具体业务代码的封装,可以达到复用的结果
TIP
业务服务层,要引入数据访问映射 Mapper
;但Mapper内部要引入模型类,因为常驻内存原因,则不能使用 @Inject
注解引入Mapper
业务服务层要继承 AbstractService
抽象服务类,该类引入了 ServiceTrait
里面是对MineAdmin标准CURD一套的封装。
/**
* Foo 业务服务
*/
class DemoFooService extends AbstractService
{
/**
* @var DemoFooMapper
*/
public $mapper;
/**
* @param DemoFooMaper $mapper
*/
public function __construct(DemoFooMapper $mapper)
{
$this->mapper = $mapper;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 数据访问映射层
通俗来讲,这层作用是对业务SQL的封装,因为它已经直接操作模型类了
TIP
引入模型类,必须按照示例代码来引入,模型绝对不能使用依赖自动注入
形式引入。否则因为常驻内存的原因,会出现不可预测的问题。
use App\Demo\Model\FooModel;
/**
* 示例代码
*/
class DemoFooMapper extends AbstractMapper
{
/**
* @var FooModel
*/
public $model;
public function assignModel()
{
$this->model = FooModel::class;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16