thinkphp6教程笔记(总结分享)

本篇文章给大家带来了关于php的相关知识,其中主要总结了一些笔记知识点,包括了模型、系统服务、laket-admin项目等内容,下面一起来看一下,希望对大家有帮助。

thinkphp6教程笔记(总结分享)

推荐学习:《PHP视频教程》

安装

在这里插入图片描述
记得加路径 或者(全路径)php (全路径)composer.phar 命令 的方式运行。避免php版本问题==
在这里插入图片描述
要开启多应用,必须使用 composer require topthink/think-multi-app 安装多应用拓展!!

在这里插入图片描述
这中方式启动的是php的内置服务器 所以如果nginx设置了这个端口号 启动不起来 。
这个仅用于测试 平常还是用nginx的好。而且可以把目录指定为public目录,这样直接 ip:1000 就能访问到了 。但是会不会php使用info的时候 根目录出错?

立即学习“PHP免费学习笔记(深入)”;

另外安装composer的时候 不要要从小皮面板安装 坑货······

且需要更改php命令行的版本 或者好像curl -sS https://getcomposer.org/installer | php 这个命令改最后一个参数为安装路径就行?
然后php8.0要安装zip拓展 直接小皮面板会报错 要手动安装 ==都是坑
】不用小皮就不会遇到这些问题!

大坑==

phpstudy 网站那 要关了open_dir 防止跨站攻击的 不然设置public目录为 网站根目录后 就访问不到外面的
如果php_ini中设置了 也关了 或者设置下正常目录
nginx中 和fastcgi.conf里可能也有这个设置

然后 要开启php的
display_errors = On
display_startup_errors = On

默认是不开启的==
这个 即使没开 框架也能报错 可能是因为设置了iniset的 但是框架要正常启动了才有效。否则比如遇到的500错误 框架根本没启动起来 自然也就显示不了报错了

另外 如果是拷贝的文件 权限可能也要设置下 为755

env也要开启debug

然后runtime目录设置为777

基础

错误显示

除了上面的大坑外,一般是设置env
在这里插入图片描述

配置

[DATABASE]USERNAME =  rootPASSWORD =  123456
use thinkfacadeEnvfunction(){// 获取环境变量 如果不存在则使用默认值rootEnv::get('database.username', 'root');}

![在这里插入图片描述](https://img-blog.csdnimg.cn/ecc6a4984a234f61b60138f916501197.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LqR6Zey5LiN5pS2,size_20,color_FFFFFF,t_70,g_se,x_16

应用目录

在这里插入图片描述

输出

在这里插入图片描述
数组不能直接用return

控制器

两个特殊的控制器

一. 基础控制器

一般来说,创建控制器后,推荐继承基础控制器来获得更多的方法;基础控制器仅仅提供了控制器验证功能,并注入了thinkApp和thinkRequest;这两个对象后面会有章节详细讲解,下面我们继承并简单使用一下;

二. 空控制器

namespace appcontroller; use appBaseController; class Test extends BaseController { public function index() { //返回实际路径 return $this->app->getBasePath(); //返回当前方法名 return $this->request->action(); } }

在单应用模式下,我们可以给项目定义一个 Error 控制器类,来提醒错误;

class Error { public function index() { return ‘当前控制器不存在!’; } }

模型

游标的意义

在这里插入图片描述

验证器

使用

例如, 在 TP3 的时候, 可能是这样判断的:

$name = I('name', '');if (empty($name)) {    // 抛出异常}

如果参数比较多的时候, 需要判断的变量越多代码量也随着增加. 如果使用验证器就会好很多.

验证器的官方文档: https://www.kancloud.cn/manual/thinkphp6_0/1037624

直接上代码:

post();        $validate = Validate::rule([                'name|名称'  => 'require|max:25',                'email|邮箱' => 'require|email'            ]);         if (!$validate->check($input)) {            return $validate->getError();        }    }}

在这里插入图片描述

验证的好处

主要是 重复使用 而且直接输出错误信息 避免重复写代码

系统服务

使用系统服务有大大的好处和避免了直接修改类的坏处。从以上分析来看,个人觉得,使用系统服务,可以对一个类进行非入侵式的「配置」,如果哪天一个类的某些设定需要修改,我们不用直接修改这个类,只需要修改服务提供类就好了。对于扩展包来说,系统服务使其可以在扩展中灵活配置程序,达到开箱即用的效果。不过,有个缺点是系统服务类都要在程序初始化是进行实例化,如果一个系统的服务类很多,势必影响程序的性能。

使用 thinkphp 开发网站,在没有 thinkphp6 版本出来以前,常规的开发模式都是使用它自带的多应用开发方式来进行项目开发。

多应用开发的一个好处就是开发方便和快速,只需要在thinkphp规定的app目录建立一个目录,比如 admin 目录,然后在其内建立一个 controller 目录就可以开始一个项目的基本开发了。

然而这样开发只适合基于它本身的目录进行开发,如果想要把项目做成一个包来开发和发布,这样的方式明显不行。

而这次,thinkphp6 引入了 Service 的概念,增加了项目转移到包开发的可能性。

Service 的使用需要继承 thinkService ,同时 Service 默认的 register 和 boot 这两个方法是非必须的,就是说可以不用添加也是可以的。

但是,我们使用 Service 就是为了在项目启动前添加自己的配置和注册一些自己的东西,所以这两个方法对项目开发来说,都利用起来是最好的方法。

register的使用
register 的加载要先于 boot 方法,也同时在系统里属于提前注册一些具体的配置及绑定类,所以在具体的项目开发中,也是推荐只做一些项目的配置。

Service 的引入会根据 thinkphp6 生成的 Services.php 缓存顺序进行加载,所以在使用过程中需要注意当前的 Service 在缓存中属于哪个位置,防止在注册配置时候出现配置加载时出现不可知的问题。

boot 的使用
boot 通常是在 register 注册完成后进行加载,boot 方法里推荐做一些对 register 注册完成后的信息的补充处理。

thinkphp6 由于在 boot 前已做了系统配置的初始化操作,所以在这里处理一些数据库操作也是没有问题的。

Service 的其他方法
loadRoutesFrom :导入路由,传入数据为匿名函数

registerRoutes :功能于 loadRoutesFrom 一样

BibiGPT-哔哔终结者 BibiGPT-哔哔终结者

B站视频总结器-一键总结 音视频内容

BibiGPT-哔哔终结者 28 查看详情 BibiGPT-哔哔终结者

commands :导入脚本命令,传入数据为数组或者单个脚本

使用 Service 的场景
如果你想要把一个项目独立成一个包进行发布或者为 thinkphp6 提供扩展包。

如果只是单纯的想做一个 app 项目,Service 估计不太适合你。

最后,Service 的具体实践有没有什么好的项目推荐啊,那当然有的,这里隆重推荐一个完全使用 Service 开发的项目:

laket-admin: https://github.com/deatil/laket-admin

laket-admin 使用 thinkphp6 的 Service 模式加单应用开发而成,避开了 thinkphp6 多应用下 url 出现的一些问题,对用户端的 url 更加友好。

laket-admin项目的截图

为什么halt

在这里插入图片描述

依赖注入与容器

依赖注入其实本质上是指对类的依赖通过构造器完成自动注入,例如在控制器架构方法和操作方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于访问控制器的参数都来自于URL请求,普通变量就是通过参数绑定自动获取,对象变量则是通过依赖注入生成。

如何注入

首先是构造器注入

api/manager/TestMgr.php

namespace appapimanager;class TestMgr{    public string $name1 = 'a';}

api/controller/Test.php

class Test{    public function __construct(TestMgr $testMgr){        $this->testMgr=$testMgr;    }    public function index()    {        return $this->testMgr->name1; //输出a        //same as $a=new TestMgr();return $a->name;    }

构造器方法注入的解析

如果换成我们手动调用的方式,那么正常的流程应该是

$testMgr = new TestMgr();//多出来了这一步 要先实例化TestMgr$test = new Test($testMgr);$test->index($testMgr);

然而 浏览器直接调用的方式是 ,因为 正常情况下 不可能我们接口调用 还去 先new一堆东西吧

$test = new Test();$test->index($testMgr);

但这样肯定会报错 因为 构造器有参数 但是你没传。所以我们不能直接这么写,要写成上面那种自动注入的参数的形式。而事实上 我们也可以通过invoke函数来完成递归实例化这一操作。

所以,相当于容器自动帮我们完成了这个操作。我们要做的 只是在方法的参数中写需要的那个类的即可 不需要去手动去new底层的一堆对象

方法调用的方式

api/manager/TestMgr.php

namespace appapimanager;class TestMgr{    public string $name1 = 'a';}

api/controller/Test.php

namespace appapicontroller;use appapimanagerTestMgr;class Test{    public function index(TestMgr $testMgr)    {        return $testMgr->name1;//1    }}

invoke

//使用容器来实例化的话,可以自动进行依赖注入。invoke(类名)//某个方法依赖注入invoke(['类名','方法名'])
$bar = new Bar(); $foo = new Foo($bar);等价于$foo = invoke('Foo');

也支持对某个函数或者闭包使用依赖注入

$result = invoke(function(Bar $bar) {    // ...});

上面的实现——-容器

什么是容器

在这里插入图片描述
ThinkPHP使用容器来更方便的管理【类依赖】及【运行依赖注入】
在这里插入图片描述
在这里插入图片描述

简而言之,容器内部是通过反射类或闭包等来实现类的实例化(单例)。
容器并非只能用于依赖注入
//官方说明:容器中已经调用过的类会自动使用单例,除非你使用下面的方式强制重新实例化。
// 每次调用都会重新实例化->$cache = app(‘user’,true);

app助手函数

在这里插入图片描述

$arrayItem = app(‘orgutilsArrayItem’);
上述代码会判断在容器中是否存在这个单例,如果有就直接返回,没有就帮我们自动创建一个这个类的单例然后返回。
比如:
echo app(‘user’)->name;

注释:new是写死的 而上面是字符串 可以动态解析的!!

app和invoke这两个助手函数的区别

app 快速获取容器中的实例 支持依赖注入
invoke 调用反射执行callable 支持依赖注入

bind

依赖注入的类统一由容器进行管理,大多数情况下是在自动绑定并且实例化的。不过你可以随时进行手动绑定类到容器中(通常是在服务类的register方法中进行绑定),支持多种绑定方式。
bind就是给实例起一个别名 方便app快速调用

// 绑定类库标识bind('user','appindexmodelUser');// 快速调用(自动实例化)echo app('user')->name;

更多bind的用法看手册

ps:bind 实际上是$this->app->bind(‘thinkCache’, ‘appcommonCache’);的快捷调用
也叫助手函数

provider.php

一般来说,bind只能在定义的那个地方用,其他地方就用不了了。所以,为了其他地方也能用,我们将bind函数写在provider.php文件中
在这里插入图片描述

容器的好处

容器:【“拿来即用”,不需要通过实例化,松耦,节约资源】

容器自动依赖注入

容器主要用于依赖注入,依赖注入会首先检查容器中是否注册过该对象实例,如果没有就会自动实例化,然后自动注入

自定义实例化

在这里插入图片描述

其他

在这里插入图片描述

场景

支持使用依赖注入的场景包括(但不限于):

控制器架构方法;
控制器操作方法;
路由的闭包定义;
事件类的执行方法;
中间件的执行方法;

门面 face就大量使用了依赖注入

Facade 门面模式

看设计模式那个文档。
tp中,说的直白一点,Facade功能可以让类无需实例化而直接进行静态方式调用。使用静态方式调用非静态方法时隐式的实例化了该类,无需额外的实例化工作(看最下面总结 因为要实例化的可能很多个)。
在这里插入图片描述
在这里插入图片描述

简单来说 就是request实际上是用依赖注入的方式写的,所以需要实例化一大堆。所以要么使用门面模式 要么使用自动依赖注入的方式调用!

在这里插入图片描述
facade目录 和外面是对应的

在这里插入图片描述

推荐学习:《PHP视频教程》

以上就是thinkphp6教程笔记(总结分享)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/478757.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Linux的who命令
上一篇 2025年11月8日 10:26:25
不要暴露、放弃AI、尽快搬离地球!霍金的这些忠告究竟有何深意?
下一篇 2025年11月8日 10:26:35

相关推荐

  • ThinkPHP6性能优化技巧:让应用更高效

    ThinkPHP6是一款功能强大的PHP开发框架,被广泛应用于Web应用的开发中。然而,在处理大规模数据和高并发访问时,性能优化就成为了关注的焦点。本文将介绍一些让ThinkPHP6应用更高效的性能优化技巧,并附上代码示例。 一、使用缓存缓存是提高应用性能的有效手段之一。ThinkPHP6内置了缓存…

    2026年9月8日
    000
  • 通过ThinkPHP6打造一个完整的企业级Web应用

    在当前web应用程序开发领域,许多的企业级web应用都是使用php语言实现的。其中,thinkphp框架作为国内php框架发展的先锋之一,经过多年的发展与完善,成为了国内最流行的php框架之一。本文将通过thinkphp6框架的学习实践,从零开始打造一个完整的企业级web应用。 一、安装与配置 首先…

    用户投稿 2026年9月7日
    000
  • 在ThinkPHP6中使用Ajax

    thinkphp6是一款流行的php开发框架,它提供了许多强大的功能来快速开发web应用程序。其中一个非常强大的功能是ajax,它使得在不刷新整个页面的情况下,可以通过异步请求获取和更新页面内容。在本文中,我们将学习如何在thinkphp6中使用ajax,以提高web应用程序的性能与用户体验。 引入…

    用户投稿 2026年9月7日
    100
  • ThinkPHP6中的依赖注入

    依赖注入是现代php开发中非常重要的概念,它可以帮助开发者更好地管理类之间的依赖关系,提高代码的可扩展性和可重用性。在php框架thinkphp6中,依赖注入也得到了很好的支持。 在ThinkPHP6中,我们可以通过注解方式或配置文件的方式进行依赖注入。下面我们具体来看一下这两种方式的使用方法。 首…

    用户投稿 2026年9月7日
    200
  • 利用ThinkPHP6实现路由分组

    在现代web开发中,路由是一个至关重要的组成部分。它帮助我们将请求映射到相应的控制器方法,并且可以根据不同的url路径来执行不同的操作。在一些复杂的应用中,可能需要将路由进行分组,以便更好地组织和管理。本文将介绍如何在thinkphp6中实现路由分组。 ThinkPHP6是一款基于PHP的高性能We…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现订单管理系统

    随着互联网的发展和电子商务的兴起,越来越多的企业开始使用在线订单管理系统,以便更好地管理订单、提高工作效率、提供更好的客户服务。本文将介绍如何使用thinkphp6框架开发一个简单的订单管理系统,涵盖了订单列表、订单详情、搜索、排序、分页等功能。 准备工作 首先,需要安装好PHP、MySQL和Com…

    用户投稿 2026年9月7日
    000
  • 在ThinkPHP6中使用Memcached

    随着互联网的快速发展,网站的访问量越来越大,如何提高网站的访问速度成为了每个网站开发者需要关注的问题。在这方面,缓存技术是一个非常重要的手段。而memcached作为一种高性能的分布式内存对象缓存系统,应用广泛,特别是在高并发的web应用程序中更是不可或缺的一部分。本文就来介绍在thinkphp6中…

    用户投稿 2026年9月7日
    000
  • 如何在ThinkPHP6中使用队列技术

    随着web网站的不断发展和用户量的增长,系统的并发处理能力和任务调度能力成为设计中的瓶颈。为了解决这些问题,队列技术被广泛地应用于web系统中。 ThinkPHP6是一款优秀的PHP开发框架,它提供了强大的队列技术,可以用于异步处理任务和调度任务。本篇文章将介绍如何在ThinkPHP6中使用队列技术…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现支付宝授权登录

    随着移动支付的普及,支付宝已经成为了很多人日常生活中必不可少的支付工具。而对于一些在线网站和应用程序来说,支付宝授权登录也成为了用户快速登录的一种方便有效的方式。那么如何使用thinkphp6来实现支付宝授权登录呢?下面将为大家详细介绍。 1.申请支付宝开发者账号在使用支付宝授权登录之前,我们需要先…

    用户投稿 2026年9月7日
    000
  • 如何在ThinkPHP6中使用Swagger

    swagger是一种流行的api文档生成工具,可以帮助开发人员轻松地创建、设计和部署api接口。在本文中,我们将介绍如何在thinkphp6中使用swagger来生成api文档,并使用swagger-ui来查看和测试api接口。 第一步:安装Swagger-UI和Swagger-Annotation…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现邮件发送

    随着电子邮件在日常生活中的广泛应用,很多网站和应用程序都需要实现邮件发送功能。thinkphp6提供了很方便的方式来实现邮件发送功能,并且支持多种邮件服务商。 本文将介绍如何使用ThinkPHP6框架来实现邮件发送功能。 配置邮件发送参数 ThinkPHP6的邮件发送功能需要在应用的.env文件中配…

    用户投稿 2026年9月7日
    100
  • 利用ThinkPHP6实现微信小程序云开发

    随着互联网技术的不断发展,移动互联网的重要性越来越受到人们的关注。微信小程序是近年来流行起来的一种移动应用,越来越多的企业和开发者选择使用微信小程序来进行产品推广和开发。而微信小程序云开发则是一种更加简便和高效的方式。 ThinkPHP6是一款PHP框架,具有高效、简单、易扩展等特点。本文将介绍如何…

    用户投稿 2026年9月7日
    000
  • 学习ThinkPHP6的最佳实践

    thinkphp6是目前最流行的php框架之一,具有高效、简洁、安全等特点,在web开发领域中得到广泛应用。在学习和使用该框架的过程中,我们需要掌握一些最佳实践,以确保代码质量和性能,并提高开发效率。本文将分享一些学习thinkphp6的最佳实践。 一、采用MVC模式 ThinkPHP6采用了MVC…

    用户投稿 2026年9月7日
    000
  • 在ThinkPHP6中使用Laravel的Eloquent ORM

    thinkphp6是一款十分流行的php框架,而laravel则是另一款备受欢迎的php框架。两个框架都拥有各自的特点和优势,但其中laravel的eloquent orm(对象关系映射)引擎被誉为“php世界最好的orm”。 在使用ThinkPHP6时,如果我们想用上Laravel的Eloquen…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现拦截器

    随着互联网技术的不断发展和应用,网站的访问量越来越大。为了保证网站的稳定性和安全性,我们需要添加各种安全层面的保护。拦截器是其中一个非常实用的技术手段,它可以在用户访问某个页面之前拦截请求,进行特定的处理,从而达到控制访问权限的目的。本文将介绍如何使用thinkphp6实现拦截器。 环境准备 在开始…

    用户投稿 2026年9月7日
    100
  • 利用ThinkPHP6实现云存储

    在当下的互联网应用中,对于文件存储和传输的需求越来越高。云存储成为了一种越来越流行的解决方案,本文将介绍如何利用thinkphp6框架实现云存储。 一、什么是云存储 云存储是将数据存储在云计算平台上的一种方式,它可以在不同的设备之间进行数据共享和传输。相较于传统的本地存储方式,云存储具有以下几个优势…

    用户投稿 2026年9月7日
    000
  • 如何在ThinkPHP6中使用Elasticsearch

    在当前互联网时代,随着海量数据的爆炸式增长,搜索引擎变得越来越重要。而elasticsearch作为一个高度可扩展的全文搜索引擎,已经逐渐成为开发者们解决搜索问题的首选。本文将介绍如何在thinkphp6中使用elasticsearch来实现数据检索和搜索功能,让我们开始吧。 第一步:安装elast…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现动态路由

    thinkphp6是一个开源的php框架,它提供了许多便捷的功能来帮助开发者快速构建web应用程序。其中一个强大的功能就是动态路由。本文将介绍如何使用thinkphp6实现动态路由。 什么是动态路由? 路由是指将URL请求映射到应用程序的特定部分的过程。在静态路由中,URL路径与应用程序的路由规则一…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现数据库分页

    随着web技术的发展和普及,越来越多的网站采用数据库分页技术,以便更好地展示大量数据。thinkphp作为一种常用的php框架,自然也推出了相应的数据库分页扩展。本篇文章将介绍如何使用thinkphp6实现数据库分页。 一、ThinkPHP的Paginator类 首先,我们需要了解一下ThinkPH…

    用户投稿 2026年9月7日
    000
  • 如何使用ThinkPHP6实现支付宝支付

    随着移动支付的普及,支付宝成为了越来越多人的首选支付方式。而作为一款高性能、高效率、安全稳定的开源框架,thinkphp6也被众多开发人员所青睐。那么,如何在thinkphp6中快速简便地实现支付宝支付呢? 首先,我们需要在支付宝开放平台上申请签约支付宝开放平台,获取相应的应用信息。具体流程可参考支…

    用户投稿 2026年9月7日
    000

发表回复

登录后才能评论
关注微信