当前位置: 首页 > news >正文

学习笔记20251225

用户登录流程

控制器、服务、DAO模型之间的数据流图

flowchart TDA[客户端请求] --> B(API控制器<br>LoginController->login)B --> C{控制器<br>进行参数验证}C -->|成功| D[登录服务<br>LoginService->login]C -->|失败| E[返回错误JSON]D --> F[用户DAO<br>userDao->getOne]F --> G{服务进行<br>查询结果判断}G -->|用户存在| H[生成Token]G -->|用户不存在| EH --> I[返回成功JSON<br>附带Token]E --> J((响应端))I --> J

数据访问对象(DAO)

封装数据访问操作,提供统一接口。

基类的设计

<?php
// app/common/dao/BaseDao.phpnamespace app\common\dao;use think\Model;/*** 基础数据访问对象 - 抽象类*/
abstract class BaseDao
{// 核心:子类必须返回对应的模型实例abstract protected function getModel(): Model;// 1. 查单条 (根据ID)public function getById($id, $field = '*'){return $this->getModel()->field($field)->find($id);}// 2. 查单条 (根据条件)public function getOne(array $where, $field = '*'){return $this->getModel()->where($where)->field($field)->find();}// 3. 查列表public function getList(array $where = [], $field = '*', $order = 'id DESC', $limit = 0){$query = $this->getModel()->where($where)->field($field)->order($order);if ($limit) $query->limit($limit);return $query->select();}// 4. 新增public function create(array $data){return $this->getModel()->insertGetId($data);}// 5. 更新 (根据ID)public function updateById($id, array $data){return $this->getModel()->where('id', $id)->update($data);}// 6. 删除 (根据ID)public function deleteById($id){return $this->getModel()->where('id', $id)->delete();}/*** 魔术方法:转发到模型查询构造器,处理复杂查询* @param string $method* @param array $args* @return mixed*/public function __call(string $method, array $args){// 将未定义的方法调用转发到底层模型,保留ThinkPHP链式操作的全部能力return call_user_func_array([$this->getModel(), $method], $args);}
}

用户DAO的实现

<?php
// app/common/dao/user/UserDao.phpnamespace app\common\dao\user;use app\common\dao\BaseDao;
use app\common\model\user\User;class UserDao extends BaseDao
{// 唯一必须实现的方法:告诉BaseDao操作哪个表protected function getModel(): User{// 简单返回模型类即可return new User();// 或使用容器:return app(User::class);}// 可选:扩展自己的特殊查询方法public function getByPhone($phone){return $this->getModel()->where('phone', $phone)->find();}
}

拓展:抽象类的特点

特点 说明
不能直接实例化 最重要的特性。你不能用 new AbstractClass() 创建对象。它存在的意义就是被继承
可以包含抽象方法 使用 abstract 关键字声明(如 abstract public function save();)。只有方法签名,没有方法体(花括号 {} 部分)。子类必须实现这些方法。
可以包含具体方法 可以像普通类一样,拥有已经实现了的属性和方法。子类可以直接继承和使用这些具体实现。
通过继承实现 子类使用 extends 关键字继承抽象类。一个子类只能继承一个抽象类(单继承)。
http://www.jsqmd.com/news/264239/

相关文章:

  • 【毕业设计】基于python-CNN深度学习机器学习识别是否有火焰
  • 深度学习毕设项目:基于python-CNN深度学习识别狗脸
  • 【课程设计/毕业设计】基于机器学习python-CNN深度学习识别是否有火焰
  • x-tt-session-dtrait、bd-ticket-guard-client-data
  • 普通人视角:如何辨别 “电子手办” 式 AI Agent?3 个实用判断标准
  • X 下载器 2.3.10 |支持国外多平台嗅探下载 内置浏览器 高速下载
  • 2026上海高中班课辅导机构TOP10榜单揭晓!选课攻略+高分秘籍全解析 - 品牌测评鉴赏家
  • 2026沪上学子提分秘籍:靠谱班课补习机构大揭秘 - 品牌测评鉴赏家
  • numpy的使用
  • 一个基于 Vue、Datav、Echart 框架开源免费的数据大屏可视化系统 - 指南
  • DirectX-一键修复文件缺失-系统文件错误修复工具
  • 深度学习毕设项目:基于python-CNN深度学习识别是否有火焰
  • Leaflet核心概念
  • 2025年 蓝桥杯省赛C++A组题解
  • Transmormer从零基础到精通
  • 2026上海班课辅导机构红榜:5家口碑之选+3个避坑指南,家长选课不踩雷 - 品牌测评鉴赏家
  • re库使用教程
  • 计算机深度学习毕设实战-基于人工智能python-CNN深度学习的蝴蝶识别
  • https://github.com/jay3-yy/BiliPai
  • 这些降重服务商均集成AI智能改写技术,免费试用使用户体验高效的文本优化效果。
  • mtgsig1.2
  • Oracle安装
  • 上海班课辅导哪家强?2026最新测评指南来了,这5类机构家长必看 - 品牌测评鉴赏家
  • 这些降重机构均整合AI智能改写工具,免费试用让用户体验高效的文本优化解决方案
  • 大众点评小程序mtgsig
  • 机器学习:python购房分析系统 房贷数据分析 房屋中介管理系统 贷款计算 Django框架
  • 深度学习计算机毕设之基于卷神经网络python-CNN深度学习的蝴蝶识别
  • 上海初中班课怎么选不踩雷?2026口碑机构测评+避坑指南 - 品牌测评鉴赏家
  • 上海班课选哪家不踩坑?2026家长必藏榜单 - 品牌测评鉴赏家
  • 财联社24小时实时跟踪