💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## MVC 逻辑规范 区别于传统的MVC模式,对项目的逻辑思想做如下规范: >[danger] Controller层 做调用和页面渲染,以下简称C层 如有公用调用方法,需要继承类似名为BaseController的来处理 >[danger] Model层 做核心逻辑处理和数据库操作,以下简称M层 如有公用逻辑,需要继承公共类如名为BaseModel的来处理,BaseModel继承 底层的Model做数据库操作 *说明:* *用户相关的在 `User.php`这个model里面直接查找,无需通过URL一条一条向后找具体的文件是哪一个;* *群组相关的一定是在`Group.php`这个model里面查找。* >[danger] View层 仅处理页面显示和引入静态文件,以下简称V层 不做复杂的数据操作 >[danger] 静态文件处理 JS、CSS文件需要统一放到一个地方,view层视图文件分别引入 如有必要,请考虑加载速度,以CDN加速来处理的方式,需要在 静态文件前加入 cdn 地址 ## 简单示意图如下 ![](https://box.kancloud.cn/d1feaec73eddc7d2835d7a61bee8828c_982x520.png) 以下为 IM3.0项目 示例代码: <?php namespace app\common\model; // 前后必须要有空行 use think\Model;// 前后必须要有空行 class App extends Model // 大括号换行写 { // 自定义 表主键 protected $pk = 'id'; // 自动义 表名 protected $name = 'app'; // 设置JSON类型字段 protected $json = ['configs']; /** * * Notes: 应用绑定管理员,一对一从属关系 * 即,一个应用属于某一个管理员,一个管理员只有一个应用 * * @return \think\model\relation\HasOne */ public function admin() { return $this->belongsTo('Admin', 'aid'); } /** * * Notes:应用绑定版本,从属关系, * 即:一个应用属于某一个版本,版本不能新增,但可以修改 * * @return \think\model\relation\BelongsTo */ public function version() { return $this->belongsTo('ImVersion', 'aid', 'aid'); } /** * * Notes:保存/修改应用数据 * * @param array $arr * * @return \app\common\model\App|bool * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function config($arr = []) { /*老板写的好简单明了*/ $aid = $arr['uid']; $data = ['aid' => $aid,] + $arr; // 追加数组的写法 if (self::where('aid', $aid)->find()) { unset($data['aid']); // 释放内存 return self::where('aid', $aid)->update($data); // 更新数据 } else { return (new self)->save($data); // 保存数据 } } /** * * Notes:获取 下拉多选 框的应用列表 * * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function getList() { // 先查询 应用列表 数据 $apps = self::field(true)->select(); // 初始化返回数据为一个数组 $data = []; // 遍历取值往data里追加数据,id和域名名称 foreach ($apps as $v) { $data[] = [ "name" => $v->domain, "value" => $v->id, "selected" => "", "disabled" => "" ]; } // 返回数据 return $data; } 控制器中直接调用config的代码。 注意model层中的代码方法一定是`public` 类型。 通过 facade 实现静态调用 定义门面类: <?php namespace app\facade; use think\Facade; class App extends Facade { protected static function getFacadeClass() { return 'app\common\model\App'; } } 控制层调用方法如: use app\facade\App; $data = []; App::config($data); 定义关联关系 : 从属关系 namespace app\common\model; use think\Model; class BackList extends Model { protected $pk = 'id'; protected $table = 'blacklist'; // 定义相对关联 public function user() { return $this->belongsTo('User'); } } model层的业务逻辑如: >[danger] 如数据库操作支持表关联,请定义好表与表之间的关联关系。查寻可通过关联直接获取数据。