文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

写给使用thinkphp 6 的初级使用者 更快更好更优雅的使用 think tp6教程

2023-09-02 08:47

关注

安装think

之前说过thinkphp 6 的安装 这里就不在叙述

think安装教程

如果学过 之前的 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];}}

模型操作 参考

tp6 模型操作

搜索器

tp6 搜索器

模型获取器

tp6 获取器

模型修改器

tp6 修改器

模型事件描述

事件 描述 事件方法名
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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯