目录
- niucloud-saas手册
- 源码下载
- 安装部署
- 二次开发须知
- 二次开发指导
- 二次开发应用插件视频教程
- 二次开发安装视频教程
- 准备工作与创建插件
- 插件目录整体说明
- 插件admin目录
- 插件app目录说明(adminapi、api、验证器)
- 插件app目录(dict、job)
- 插件app目录说明(lang、listener)
- 插件app目录说明(model、service)
- 插件uniapp目录说明
- 插件开发之后台功能开发(代码生成器)
- 插件开发之uniapp功能开发(api)第一节
- 插件开发之uniapp功能开发(api)第二节
- 插件开发之uniapp功能开发(api)第三节
- 插件安装与打包原理
- 消息队列开发
- 计划任务开发
- DIY组件和自定义页面装修开发
- 支付接口开发
- 插件升级包打包流程以及云编译功能
- 常见问题
- 怎么添加菜单,添加了菜单不出现怎么回事
- 怎么配置跨域的问题
- 站点site端(租户端、商家端)和saas管理端(平台端)究竟啥意思,有啥区别
- 框架中是有订单表order,假如开发一个商城插件,请问商城的订单数据是不是重新搞一个订单表shop_order
- 有些支付平台是绑定回调唯一网址或目录,如果有几个开发者开发插件都有支付那这块怎么解决?
- 站点过期,可以登录,这样对吗?
- 计划任务怎么启动啊
- Git多分支开发,切换分支
- 安装应用出现is_dir():报错处理方案
- 绑定授权时出现“请求来源产品与授权产品不一致”解决方案
- “未找到admin源码所在目录”的解决方案
- 页面装修本地开发环境配置
- 接口请求错误处理方案
- 未获取到授权信息问题处理方案
- 腾讯地图配置
- 请求超时问题处理方案
- 下载应用时提示找不到zip解决方案
- 怎么关闭开发调试模式
- 获取数据失败问题处理方案
- 框架安装后,访问域名无法进入admin端(多数发生在本地)
- 底部导航失效问题
- 开放平台小程序审核通过发布失败问题
- 先升级插件后升级框架,导致云编译报debounce的错误
- 微信公众号自动回复不通
- 如何修改访问域名默认跳转端口
- 插件与框架的版本兼容问题处理方案
- 升级提示mkdir()处理方案
- 云编译时node.js内存不足导致内存溢出处理方案
- 报错Allowed memory size of ** bytes exhausted (tried to allocate ** bytes)处理方法
- 代码生成器
- niucloud (服务端)
- admin (后台管理端)
- uni-app(手机端前端)
- web端(PC前端)
- api接口
- 配置手册
控制器
controller控制器是api接口的载体。控制器接收到api接口请求,调用services层中的具体功能实现模块,返回给api接口。
控制器的位置
app\adminapi\controller 管理端控制器
app\api\controller 前端控制器
core\base\BaseController 控制器基类
BaseController类按照端口,有以下子类
BaseAdminController、 BaseApiController
这几个类的文件都定义在 niucloud\core\base 文件夹中。
BaseController是所有控制器类的基类,对于可能在多个端口都会调用的控制器类,一般继承自他。
BaseAdminController是Admin管理端的控制器的基类
BaseApiController是前端的控制器的基类
后台管理会员的控制器继承实现如下
class User extends BaseAdminController
{
public function lists(){
$data = $this->request->params([
['username', ''],
['real_name', '']
]);
$list = (new UserService())->getUserAdminPage($data);
return success($list);
}
/**
* 用户详情
* @param $uid
* @return Response
*/
public function info($uid){
return success((new UserService())->getUserAdminInfo($uid));
}
}
通过继承BaseAdminController,自动实现了权限和路由的控制。调用Service方法直接返回给api接口。
前台会员控制器继承自BaseApiController, 实现了各种前台会员的api接口
namespace app\api\controller\member;
use app\service\api\login\AuthService;
use app\service\api\member\MemberLogService;
use app\service\api\member\MemberService;
use core\base\BaseApiController;
use think\Response;
class Member extends BaseApiController
{
/**
* 会员信息
* @return Response
*/
public function info(){
return success((new MemberService())->getInfo());
}
/**
* 会员中心
* @return Response
*/
public function center(){
return success((new MemberService())->center());
}
/**
* 修改会员
* @param $member_id
* @param $field
* @return Response
*/
public function modify($field){
$data = $this->request->params([
['value', ''],
['field', $field],
]);
$data[$field] = $data['value'];
$this->validate($data, 'app\validate\member\Member.modify');
(new MemberService())->modify($field, $data['value']);
return success('MODIFY_SUCCESS');
}
/**
* 编辑会员
* @return Response
*/
public function edit(){
$data = $this->request->params([
['data', []],
]);
(new MemberService())->edit($data['data']);
return success('MODIFY_SUCCESS');
}
/**
* 绑定手机号
* @return void
*/
public function mobile(){
$data = $this->request->params([
['mobile', ''],
['mobile_code', ''],
]);
return success((new AuthService())->bindMobile($data['mobile'], $data['mobile_code']));
}
/**
* 会员日志
* @return Response
*/
public function log(){
$data = $this->request->params([
['route', ''],
['params', ''],
['pre_route', '']
]);
(new MemberLogService())->log($data);
return success('SUCCESS');
}
}