阅读此文档,需要对
ThinkPHP
有基本的了解,TP控制器文档
app\common\controller
准备了 Backend
(后台基类)和 Frontend
(前台基类),系统几乎所有的控制器都是继承于它们的。Api
类,在 Api
类中我们根据路由加载了语言包、检查数据库连接、IP黑名单等,同时定义了一些快捷响应方法。Api
基类,只用于控制器内快速创建响应,模型、公共方法中是不能使用它们的。HttpResponseException
,此举优势在于调用它们时无需 return
语句,劣势在于不能在 try
代码块内使用。return json();
返回数据。success($msg = '', $data = null, $code = 1, $type = null, $header = [], $options = []);
$msg
操作成功的提示消息$data
返回数据$code
状态码$type
输出类型:json、jsonp、xml、response=输出HTML、view=渲染模板输出、redirect=页面重定向、download=附件下载$header
发送的 Header
头$options
发送的额外参数此方法与 success()
方法只有 code
是不一样的。
error($msg = '', $data = null, $code = 0, $type = null, array $header = [], $options = []);
success()
和 error()
方法都是基于它封装。
result($msg, $data = null, $code = 0, $type = null, $header = [], $options = []);
$this->success('操作成功~');
$this->success('操作成功~', [
'title' => '标题',
'content' => '内容',
]);
$this->error('操作失败~');
后台基类 app\common\controller\Backend
,后台的所有控制器,都是继承于它的,它已实现以下功能:
token
完成管理员的登录和鉴权。SQL
,比如前台发送的快速搜索、公共搜索、排序等操作,都是由此类下的 queryBuilder()
方法构建的查询 SQL
。Trait
类来实现 查询
、添加
、编辑
等功能。::: tip
做后台二次开发前,请一定翻阅 app\common\controller\Backend
文件,以此您可以知道后台控制器可以利用基类做到那些事情,因为父类可以直接重写这些属性,比如:配置免登陆方法、免鉴权方法、入库排除字段、快捷搜索字段、默认排序、数据权限控制、模型验证等。
:::
Trait
类app\admin\library\traits\Backend
Trait 类,前台发送的 查询、添加、编辑、删除、排序
操作都是通过此类实现的。app\common\controller\Backend
类,之后,如果我们需要重写 查询、添加、编辑
等来自 Trait
类的方法,请复制 Trait
类的方法到控制器后进行重写即可。前台基类 app\common\controller\Frontend
,api
应用下的所有控制器,都建议继承它,它已实现以下功能:
token
完成会员的登录和鉴权。新建控制器并继承于 前台基类
,可以直接重写这些属性。
/**
* 无需登录的方法
* 访问本控制器的此方法,无需会员登录
*/
protected array $noNeedLogin = [];
/**
* 无需鉴权的方法
*/
protected array $noNeedPermission = [];
/**
* 权限类实例
* @var Auth
*/
protected Auth $auth;
在继承于 前台或后台
的基类之后,当前类会继承到一个权限类实例,我们可以通过它获取到管理员或会员的个人资料等信息,登录的是管理员还是会员,取决与继承于 前台
还是 后台
。
// 管理员或会员是否登录
$this->auth->isLogin();
// 获取会员数据模型
$this->auth->getUser();
// 获取管理员数据模型
$this->auth->getAdmin();
// 获取管理员或会员登录token
$this->auth->getToken();
// 获取管理员或会员刷新token
$this->auth->getRefreshToken();
// 获取管理员信息-只输出允许输出的字段
$this->auth->getInfo();
// 获取会员信息-只输出允许输出的字段
$this->auth->getUserInfo();
// 是否是超管,拥有后台所有权限节点
$this->auth->isSuperAdmin();
// 是否是拥有所有会员中心权限的会员
$this->auth->isSuperUser();
若有编程修改会员余额的需要,请勿直接操作会员余额字段,请通过 app\admin\model\UserMoneyLog
余额日志模型,开启事务后,直接添加一条余额日志,会员余额会自动增减。
Db::startTrans();
try {
UserMoneyLog::create([
'user_id' => 1,
'money' => 1,
'memo' => '测试添加 1 元'
]);
Db::commit();
} catch (Throwable $e) {
Db::rollback();
$this->error($e->getMessage());
}
同样的,若有编程修改会员积分的需要,请通过 app\admin\model\UserScoreLog
积分日志模型,开启事务后,直接添加一条积分日志,会员积分会自动增减。
Db::startTrans();
try {
UserScoreLog::create([
'user_id' => 1,
'score' => 1,
'memo' => '测试添加 1 积分'
]);
Db::commit();
} catch (Throwable $e) {
Db::rollback();
$this->error($e->getMessage());
}
以上的修改余额或积分中,开启事务是很关键的,因为在日志创建过程,我们封装了涉及到 user
表字段的修改。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。