Skip to content

控制器

控制器概述

控制器是MVC架构中的核心组件,负责接收请求、处理业务逻辑(通常通过调用Service层)、并返回响应结果。

控制器目录结构

主要包含两种类型的控制器:管理后台API控制器和前端API控制器。

目录分布

plaintext
niucloud/
├── app/
│   ├── adminapi/controller/            #管理后台API控制器
│   ├── api/controller/                 #前端API控制器

模块化组织

两种类型的控制器均按功能模块进行分组,每个目录对应一个业务模块:

adminapi控制器模块(部分)

  • addon/: 插件管理相关接口

  • member/: 会员管理相关接口

  • site/: 站点管理相关接口

  • sys/: 系统管理相关接口

  • wechat/: 微信相关接口

api控制器模块(部分)

  • member/: 会员中心相关接口

  • pay/: 支付相关接口

  • weapp/: 微信小程序相关接口

  • wechat/: 微信相关接口

控制器类层次结构

采用继承机制构建控制器体系,通过基类提供通用功能,子类专注于具体业务实现。

基础控制器

BaseController是所有控制器的基类,定义在core/base/BaseController.php中,提供了控制器的基础功能:

php
abstract class BaseController
{
    protected $request;  // Request实例
    protected $app;      // 应用实例
    protected $batchValidate = false;  // 是否批量验证
    protected $middleware = [];        // 控制器中间件
    
    // 构造方法
    public function __construct(App $app)
    {
        $this->app = $app;
        $this->request = $this->app->request;
        $this->initialize();
    }
    
    // 初始化方法(子类可重写)
    protected function initialize() {}
    
    // 数据验证方法
    protected function validate(array $data, $validate, array $message = [], bool $batch = false) {}
}

应用控制器

基于基础控制器,派生出两类应用控制器:

管理后台控制器基类BaseAdminController,位于core/base/BaseAdminController.php,用于管理后台API控制器继承

php
class BaseAdminController extends BaseController
{
    public function initialize()
    {
    }
}

API控制器基类BaseApiController,位于core/base/BaseApiController.php,用于前端API控制器继承

php
class BaseApiController extends BaseController
{
    public function initialize()
    {
    }
}

业务控制器

业务控制器继承自对应的应用控制器基类,实现具体的业务逻辑,例如:

管理后台插件控制器:app/adminapi/controller/addon/Addon.php

通过继承BaseAdminController,自动实现了权限和路由的控制。调用Service方法直接返回给api接口。

php
namespace app\adminapi\controller\addon;

use app\dict\addon\AddonDict;
use app\service\admin\addon\AddonService;
use app\service\core\addon\CoreAddonService;
use core\base\BaseAdminController;
use think\Response;


/**
 * 插件管理
 * Class Addon
 * @description 插件管理
 * @package app\adminapi\controller\addon
 */
class Addon extends BaseAdminController
{

    /**
     * 插件初始化
     * @description 插件初始化
     * @return Response
     */
    public function init()
    {
        return success((new CoreAddonService())->getInitList());
    }

    /**
     * 获取已下载插架
     * @description 获取已下载插架
     */
    public function getLocalAddonList()
    {
        return success((new CoreAddonService())->getLocalAddonList());
    }

    /**
     * 获取首页应用
     * @description 获取首页应用
     * @return Response
     */
    public function getIndexAddonList()
    {
        $data = $this->request->params([
            ['label_id', ''],
        ]);
        return success((new CoreAddonService())->getIndexAddonList($data['label_id']));
    }

}

前端会员控制器:app/api/controller/member/Member.php

前台会员控制器继承自BaseApiController, 实现了各种前台会员的api接口。

php
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 $field
     * @return Response
     */
    public function modify($field)
    {
        $data = $this->request->params([
            [ 'value', '' ],
            [ 'field', $field ],
        ]);
        $data[ $field ] = $data[ 'value' ];
        $data['member_id'] =  $this->request->memberId();
        $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 Response
     */
    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();
    }

    /**
     * 获取会员码
     */
    public function qrcode()
    {
        return success(( new MemberService() )->getQrcode());
    }

    /**
     * 获取手机号
     * @return Response
     */
    public function getMobile()
    {
        $data = $this->request->params([
            [ 'mobile_code', '' ],
        ]);
        return success(( new AuthService() )->getMobile($data[ 'mobile_code' ]));
    }
}

基于 MIT 协议发布