写给使用thinkphp 6 的初级使用者 更快更好更优雅的使用 think tp6教程
安装think
- 什么是MAC?
- 控制器层
- 使用语法创建 控制器
- 如何更优雅使用thinkphp 6?
- 1. 控制器 使用:
- 登录的逻辑业务
- 定义公共逻辑层
- 公共逻辑业务
- 模型中的操作
- 模型操作 参考
- 搜索器
- 模型获取器
- 模型修改器
- 模型事件描述
- 想知道更多?
之前说过thinkphp 6 的安装 这里就不在叙述
如果学过 之前的 thinkphp 3.2.3 - thinkphp 5.1 的同学 在学习thinkphp 6上 可能会有优势~ 但仅限于语法优势
tp3.2.3 - tp6 全部 基于 MAC 逻辑开发
什么是MAC?
mac 为
M -> model 模型层 即连接数据库的模型
a -> action 方法层 作为主要的前后端 交流媒介
c -> controller 控制器层 控制器层 作为 放入方法层的主要方式
如: 我们在 thinkphp 项目根目录/app/ 中 创建一个 名为 admin 的后台应用 下的Index控制器 的 index 方法:
控制器层
declare (strict_types = 1);namespace app\admin\controller;use think\Request;class Index extends \app\common\controller\AdminBase{// 我是一个方法层public function index(){echo 'hello thinkphp world'}}
那么我们在访问 http://localhost/admin 的时候 将会在页面 输出 hello thinkphp worl
当然 使用TP6 的同学 需要 安装 多应用
composer require topthink/think-multi-app (多应用部署)
使用语法创建 控制器
php think make:controller admin@Index
即 php think 创建:控制器 应用名@控制器名称
安装后默认使用单应用模式部署,目录结构如下:
├─app 应用目录│ ├─controller 控制器目录│ ├─model 模型目录│ ├─view 视图目录│ └─ ... 更多类库目录│├─public WEB目录(对外访问目录)│ ├─index.php 入口文件│ ├─router.php 快速测试文件│ └─.htaccess 用于apache的重写│├─view 视图目录├─config 应用配置目录├─route 路由定义目录├─runtime 应用的运行时目录
也许有人会疑惑 为什么 在tp6 之前 的 5版本 和 3.2.3 版本 不需要?
因为 tp6 为了做到更灵活 除了一些必要的配置 应用 缓存 路由 等 统统都放到的vendor Composer类库目录 当中
可以理解为 tp6 不在需要 原有的 项目\think 目录了 它统统都以vendor 的形式调用
也就是说 如果 你在tp6 中使用 视图方法 view 这里将不会生效 除非你安装它我会在项目最后 放入 一个项目所需要的全部 composer 类库
模型层
如: 你创建了一个 mysql 为: turing_user 表
那么 你在thinkphp目录 app controller 或者其他 app 下的应用中 创建了一个 model 的文件夹
如: 在 app/common/model/User 中创建了一个 model层 它的定义 可以假设为 连接数据库语法
select * from turing_user 语法链接
模型层 可以 select update delete 等语法处理
基础模型层预览
declare (strict_types = 1);namespace app\common\model;use think\Model;class User extends Model{}
使用命令快速创建
php think make:model common@User
如何更优雅使用thinkphp 6?
1. 控制器 使用:
一般 大部分人 都会觉得 既然是控制器 那 我们把所有操作都放到 控制器下的方法中去操作 多省事儿其实 这么写代码 往往会一个控制器中 出现 成千上万行代码 同样不方便维护那要如何写 才方便?首先 我们需要一个继承类 这个类 将作为 这一系列的前置操作内容use app\common\controller\AdminBase;我们可以建立一个 logic 逻辑业务 thinkphp 6 并没有强制你在 控制器写 逻辑业务如: 我们写一个简单的登录:
declare (strict_types = 1);namespace app\admin\controller;use think\Request;// 公共控制器 建议use app\common\controller\AdminBase;// 实例化一个登录的逻辑业务use app\admin\logic\AdminLogin;class Login extends AdminBase{// 登录操作public function login(){// 动态调用$login = ( new AdminLogin ) :: login();}}
登录的逻辑业务
定义公共逻辑层
namespace app\common\logic;class BaseLogic{ protected static $error; protected static $returnCode = 0; protected static $returnData; public static function getError() : string { if (false === self::hasError()) { return '系统错误'; } return self::$error; } public static function setError($error) : void { !empty($error) && self::$error = $error; } public static function hasError() : bool { return !empty(self::$error); }}
公共逻辑业务
declare (strict_types = 1);namespace app\admin\logic;use think\Request;// 公共控制器 建议use app\common\logic\BaseLogic;// 实例化User 数据库use app\common\model\User;class Login extends BaseLogic{// 登录操作 设置为静态类 并设置返回方式 由于 tp 6 find 方法 返回的是 object 类public static function login() : Object{$User = (new User) -> where('username',Request()->param('username')) ->find();if($User->password != Request()->param('password')) {self::$error = '账号或者密码错误';return false;}return $User;}}
模型中的操作
declare (strict_types = 1);namespace app\common\model;// 公共定义类use app\common\model\BaseLogic;class User extends BaseLogic{// 模型中 尽量不要些逻辑业务 如果必要 可以使用 模型事件public static function onAfterRead( object $model){//查询后事件}public static function onBeforeInsert( object $model){//新增前事件}public static function onAfterInsert( object $model){//新增后事件}public static function onBeforeUpdate( object $model){//更新前事件}// 查询业务 尽量使用 模型查询 中的搜索器// 在逻辑中 原语法 // $User = (new User) -> where('username',Request()->param('username')) ->find()// 带搜索器后 (new User) -> withSearch(['username',..更多],['username'=>Request()->param('username')],,更多)public function searchUsernameAttr ( object $query , $value , $data ){$query -> where('username','like',"{$value}");}// 获取器 如 mysql 中 有个 type字段 为当前用户是否已禁用 0 禁用 1 启用 我们向告诉前台 这个是中文的禁用 或启用 时public function getTypeAttr($value){// 这里 可以时任何内容 比如 // 你要转json return json_encode($value);// 转数组 return json_decode($value , true); $type = ['禁用','启用'];return $type[$value];}}
模型操作 参考
搜索器
模型获取器
模型修改器
模型事件描述
事件 描述 事件方法名
after_read 查询后 onAfterRead
before_insert 新增前 onBeforeInsert
after_insert 新增后 onAfterInsert
before_update 更新前 onBeforeUpdate
after_update 更新后 onAfterUpdate
before_write 写入前 onBeforeWrite
after_write 写入后 onAfterWrite
before_delete 删除前 onBeforeDelete
after_delete 删除后 onAfterDelete
before_restore 恢复前 onBeforeRestore
after_restore 恢复后 onAfterRestore
想知道更多?
这里有个示例项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmdkUl4S-1676600135050)(null)]
来源地址:https://blog.csdn.net/chinanes/article/details/129078371
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341