MVC框架
# MVC框架
MVC是一种设计模式。它强制性的使用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(Model)、视图(View)、控制器(Controller),它们各自处理自己的任务。
# 控制器
控制器存放在addons/addon_name/controller
中类名和文件名保持大小写一致,并采用驼峰命名(首字母大写)。
应用的控制器与Tp6系统的使用方法一直,具体可以参考Thinkphp6控制器 (opens new window)
# 目录结构
addon_name
└── controller // 控制器 继承不同的控制器可以实现不同的功能
├── admin // 自定义目录
│ ├── Index.php
├── api
│ └── Index.php
├── h5
│ └── Index.php
├── Admin.php
└── Index.php
2
3
4
5
6
7
8
9
10
# 控制器定义
应用中定义控制器生成:yourdomain.com/addon_name/index/index.html
或者yourdomain.com/addon_name.html
示例:
<?php
namespace addons\addon_name\controller;
use think\addons\Controller;
//use app\common\controller\AddonsController; 二选一
class Index extends Controller
{
public $notLogin = ['*'];
public function index()
{
return "这是addon_name应用Index控制器的index方法";
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
当前文件位于:根目录/addons/addon_name/controller/Index.php
# 控制器目录
当遇到复杂的业务逻辑时,往往需要把相同的业务单独放到文件夹中。
这时候应用的Url请求将变为:yourdomain.com/addon_name/目录名.控制器名/方法
# 控制器继承属性
注意
这里继承的控制器Controller也可以选择app\common\controller\AddonsController;
,因为think\addons\Controller
也是继承它。
继承后将实现权限管理、应用方法等
//登录
protected $notLogin = [];
//鉴权
protected $notCheck = [];
//获取插件信息
public function getInfo(){}
//获取配置信息
public function getConfig($type = false){}
//获取插件标识
protected function getName(){}
//生成应用路由,默认会根据平台ID生成带有平台ID的链接
public function url($controller, $action = 'index', $vars = []){}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 方法权限
填写不需要登录的方法,如protected $notLogin =['index','list']
如果整个控制器都不需要可以填写protected $notLogin =['*']或者protected $notLogin ='*'
$notCheck和$notLogin属性同理,这里就不细说了
# 模型
# 使用规范
控制器不能直接调用数据库操作,所有的数据库操作必须在model
层中编写,model
中类的命名要规范,按照功能进行划分:
# 命名规范
获取单条数据命名:get
+要获取的数据+Info
比如获取用户数据 getUserInfo
获取多条数据: get
+要获取的数据+List
比如获取用户数据 getUserList
获取分页数据: get
+要获取的数据+PageList
比如获取用户列表 getUserPageList
添加数据 : add
+要添加的表 比如添加用户 addUser
修改数据 : edit
+要修改的表 比如修改用户 editUser
删除数据:delete
+要删除的表 比如删除用户 deleteUser
通过某种方式获取或者修改数据,要获取数据+By
+方式 例如获取用户插件 getUserAddonListByUid
修改表的某个字段: modify
+修改的表+字段 修改用户昵称,modifyUserNickname
;
查询列表参数标准 :getSiteList($condition = [], $field = '*', $order = '', $limit = null)
;
查询分页列表标准 getSitePageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
;
查询单条数据标准 getSiteInfo($condition, $field = '*')
;
添加方法传入data 例如: addUser($data)
;
添加多条记录方法传入data 例如: addUserList($data)
;
修改方法传入data, condition 例如 editUser($data, $condition)
;
删除方法传入condition 例如 deleteUser($condition)
;
# 内置方法
同时已经我们已经在BaseModel中封装了条件查询获取分页列表方法:
/**
* 获取分页列表查询条件
* @param $search
* @return array
*/
public function getPageListCondition($search = []){}
/**
* 获取分页列表条件模型
* @param array $params 前端条件
* @param bool $paginate 是否分页
* @return BaseModel
*/
public function getPageListModel($params = [], $paginate = true){}
/**
* 获取分页列表数据
* @param array $params
* @return \think\Collection
*/
public function getPageListData($mix = [], $params = []){}
/**
* 获取分页列表总数
* @param array $params
* @return int
*/
public function getPageListCount($mix = [], $params = []){}
/**
* 获取分页列表
* @param array $mix
* @param array $params
* @return array
*/
public function getPageList($mix = [], $params = []){}
/**
* 混入参数到模型中
* @param $model
* @param array $mix
* @return mixed
*/
public function mixPageListModel($model, $mix = []){}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 方法示例
当你继承了BaseModel后就可以直接使用对应的方法,例如:app/adminapi/controller/v1/platform/wechat/WechatOrder.php 中获取订单列表
/**
* 显示资源列表
* @Route("WechatUser", method="GET")
* @return \think\Response
*/
public function index()
{
$res = $this->model->getPageList(['scope'=>'plaid']);
return $this->success($res['count'], $res['data']->append(['user','addons','refund']));
}
2
3
4
5
6
7
8
9
10
其中筛选条件可以通过POST
请求传入search
参数,search
参数是一个数组格式如下:
$search = array(
'state' => 1,
'username like' => '多客',
'create_time' => [
0=>1638244800000,
1=>1641312000000
]
);
2
3
4
5
6
7
8
这样就实现搜索state
等于1,模糊搜索username
为多客
,并有一个创建日期范围
# 图示
# 视图
# 目录结构
视图存放于addons/addon_name/view
中
addon_name
└── view // 控制器 继承不同的控制器可以实现不同的功能
├── admin
│ └── index.html
├── h5
│ └── index.html
└── admin.html
2
3
4
5
6
7
# 使用
在控制器中想指定view/index.html这可以使用:
public function index()
{
$this->assign('value', $value);
return $this->fetch('index');
}
2
3
4
5
由于视图和Tp6的视图没任何区别,
视图可以自行参考:https://www.kancloud.cn/manual/thinkphp6_0/1037608 (opens new window)
模板语法可以参考:https://www.kancloud.cn/manual/think-template/1286403 (opens new window)