ThinkPHP6.x框架
文章平均质量分 80
CATs_001
代码也能充满温情~
展开
-
【ThinkPHP6.x框架】(1)入门(环境配置、命名规范)
环境安装(Windows)1. composer环境的配置 下载composer安装包:【下载地址】,安装直接点击下一步即可。2. 安装ThinkPHP(TP6) 进入到localhost目录,输入以下命令:composer create-project topthink/think tp6 进入到tp6目录,使用composer对ThinkPHP进行更新:composer update topthink/framework...原创 2021-07-07 21:00:14 · 455 阅读 · 0 评论 -
【ThinkPHP6.x框架】(2)相关配置与访问
相关配置开启调试 在根目录的.env文件中有关于框架的相关配置,下面以开启调试模式举例。APP_DEBUG = true; 开启调试模式后的优势:a. 记录系统运行流程的执行过程;b. 展示错误和调试信息,并开启日志记录;c. 模版修改可以及时生效(不会被缓存干扰);d. 启动右下角的 Trace调试功能,更加强大;...原创 2021-07-08 16:42:54 · 475 阅读 · 2 评论 -
【ThinkPHP6.x框架】(3)控制器与数据库
控制器简介 控制器都存放在app/controller下,当然也可以通过config/route.php中的'controller_layer'来进行修改。一般来说,创建控制器后,推荐继承基础控制器来获得更多的方法(extends BaseController),基础控制器仅仅提供了控制器验证功能,并注入了 think\App和 think\Request。这两个的大致使用方法如下:<?phpnamespace app\controller;use app\BaseC...原创 2021-07-10 11:14:36 · 597 阅读 · 0 评论 -
【ThinkPHP6.x框架】(4)数据库的增删改查
数据的查询 在thinkPHP中数据的查询主要有以下三种方法:单数据查询 先给出一个实际的例子。$data = Db::table('user')->where('age', 28)->find();Db::table('user')->where('age', 28)->find();$data = Db::getLastSql();$data = Db::table('user')->where('age', 1)-&g...原创 2021-07-10 19:54:40 · 966 阅读 · 0 评论 -
【ThinkPHP6.x框架】(5)数据库进阶1(高级查询)
时间查询传统方式可以使用>、<、>=、<=来筛选匹配时间的数据;Db::name('user')->where('create_time', '>', '2018-1-1')->select();可以使用 between关键字来设置时间的区间;Db::name('user')->where('create_time', 'between', ['2018-1-1', ...原创 2021-07-12 10:27:12 · 627 阅读 · 1 评论 -
【ThinkPHP6.x框架】(6)数据库进阶2(链式查询详解)
where1. 表达式查询,就是 where()方法的基础查询方式;Db::name('user')->where('id', '>', 70)->select();2. 可以通过关联数组和索引数组作为参数来进行查询;$data = ['gender' => '男', 'price' => 100];$data = ['gender', '=', '男', 'price', '=', 100];$user .原创 2021-07-12 11:15:21 · 556 阅读 · 0 评论 -
【ThinkPHP6.x框架】(7)数据库进阶3(高级查询与便捷查询)
高级查询使用|(OR)或&(AND)来实现 where条件的高级查询,where支持多个连缀;$user = Db::name('user') ->where('username|email', 'like', '%xiao%') ->where('price&uid', '>', 0) ->select(); 对应的sql语句如下:SELECT * FROM...原创 2021-07-20 14:08:45 · 306 阅读 · 0 评论 -
【ThinkPHP6.x框架】(8)数据库进阶4(事务与结果集处理)
事务处理1. 数据库的表引擎需要是 InnoDB才可以使用,如果不是调整即可;2. 事务处理,需要执行多个 SQL查询,数据是关联恒定的;3. 如果成功一条查询,改变了数据,而后一条失败,则前面的数据回滚;4. 比如:蜡笔小新给路飞 3快钱,自己-3,对方+3,这时需要事务处理;5. 系统提供了两种事务处理的方式,第一种是自动处理,出错自动回滚;Db::transaction(function () {...原创 2021-07-20 14:55:54 · 518 阅读 · 2 评论 -
【ThinkPHP6.x框架】(9)模型1(定义以及CRUD)
定义定义一个和数据库表相匹配的模型;<?phpnamespace app\model;use think\Model;class User extends Model{}模型会自动对应数据表,并且有一套自己的命名规则;模型类需要去除表前缀(tp_),采用驼峰式命名,并且首字母大写,对应规则如下:tp_user(表名) => Usertp_user_type(表名) => UserType创...原创 2021-07-20 17:33:56 · 568 阅读 · 3 评论 -
【ThinkPHP6.x框架】(10)模型2(获取器和修改器)
模型获取器获取器的作用是对模型实例的数据做出自动处理。一个获取器对应模型的一个特殊方法,该方法为 public。方法名的命名规范为:getFieldAttr()。举个例子,数据库表示状态status字段采用的是数值;而页面上,我们需要输出status字段希望是中文,就可以使用获取器;在 User模型端,我创建一个对外的方法,如下:public function getStatusAttr($value){ $status = [-1=>'删除', 0=>'禁...原创 2021-07-20 20:06:15 · 559 阅读 · 0 评论 -
【ThinkPHP6.x框架】(11)模型3(查询范围、搜索器、数据集)
查询范围在模型端创建一个封装的查询或写入方法,方便控制器端等调用。比如,封装一个筛选所有性别为男的查询,并且只显示部分字段5条。方法名规范:前缀scope,后缀随意,调用时直接把后缀作为参数使用:public function scopeMale($query){ $query->where('gender', '男') ->field('id,username,gender,email') ->limit(5)...原创 2021-07-20 21:55:12 · 605 阅读 · 2 评论 -
【ThinkPHP6.x框架】(12)模型4(自动时间戳、只读字段、数据类型)
自动时间戳和只读字段只支持模型方式,不支持数据库方式。模型自动时间戳 开启设置。全局开启:在database.php中,设置为true;// 自动写入时间戳字段'auto_timestamp' => true,如果你只想设置某一个模型开启,需要设置特有字段://开启自动时间戳protected $autoWriteTimestamp = true;自动时间戳开启后,会自动写入 create_time和 u...原创 2021-07-21 09:57:10 · 1143 阅读 · 0 评论 -
【ThinkPHP6.x框架】(13)模型5(JSON、软删除、事件)
数据库JSON数据库写入 JSON字段,直接通过数组的方式即可完成:$data = [ 'username' => '辉夜', 'password' => '123', 'gender' => '女', 'email' => 'huiye@163.com', 'price' => 90, 'details' => '123', 'uid' => 1...原创 2021-07-21 10:47:24 · 384 阅读 · 0 评论 -
【ThinkPHP6.x框架】(14)数据库的关联模型
对于关联方式,系统提供了9种方案,具体如下:上面的例子,我们采用了一对一的关联模型,它还有相对的反向关联; 下面给出一个例子:class Profile extends Model { public function user() { return $this->belongsTo(User::class); }}$profile = ProfileModel::find(1); return $profile-&...原创 2021-07-21 11:32:38 · 500 阅读 · 0 评论 -
【ThinkPHP6.x框架】(15)关联预载入、统计与输出
关联预载入在普通的关联查询下,我们循环数据列表会执行 n+1次 SQL查询;$list = UserModel::select([19, 20, 21]); foreach ($list as $user) { dump($user->profile);}上面继续采用一对一的构建方式,打开 trace调试工具,会得到四次查询;如果采用关联预载入的方式,将会减少到两次,也就是起步一次,循环一次;$list = User...原创 2021-07-21 13:48:09 · 615 阅读 · 0 评论 -
【ThinkPHP6.x框架】(16)路由的基础
简介路由的作用就是让 URL地址更加的规范和优雅,或者说更加简洁。设置路由对 URL的检测、验证等一系列操作提供了极大的便利性。路由的配置文件在config/route.php中,定义文件在 route/app.php。route目录下的定义文件的文件名随机,都有效,或多个均有效果。路由是默认开启的,如果想要关闭路由,在 config/app.php配置:// 是否启用路由'with_route' => false, 前期准备:创建一个 Addr...原创 2021-07-21 16:28:52 · 517 阅读 · 0 评论 -
【ThinkPHP6.x框架】(17)资源路由、注解路由和URL生成
资源路由系统提供了一个命令,方便开发者快速生成一个资源控制器,其中自带了很多CRUD的方法:php think make:controller Blog 生成的方法,参数默认值为id可以修改:->vars(['blog'=>'blog_id']); //相应的 delete($blog_id)资源路由,采用固定的常用方法来实现简化 URL的功能:Route::resource('ads', 'Address');...原创 2021-07-21 21:34:17 · 1356 阅读 · 6 评论 -
【ThinkPHP6.x框架】(18)Facade
创建静态调用Facade,即门面设计模式,为容器的类提供了一种静态的调用方式。在之前的很多例子中,我们大量的引入 Facade类库,并且通过静态调用,比如请求 Request::?,路由 Route::?,数据库 Db::?等等,均来自 Facade。下面我们手工来创建一个自己的静态调用类库,来了解一下流程;首先,在应用目录下创建 common公共类库文件夹,并创建 Test.php:namespace app\common;class Test { pub...原创 2021-07-22 09:39:49 · 420 阅读 · 0 评论 -
【ThinkPHP6.x框架】(19)请求
请求对象使用构造方法注入请求,如下:namespace app\controller; use think\Request;class Rely { protected $request; public function __construct(Request $request) { $this->request = $request; } public function index() { retur...原创 2021-07-22 11:49:50 · 853 阅读 · 0 评论 -
【ThinkPHP6.x框架】(20)验证器
验证器定义原创 2021-07-26 20:34:12 · 1350 阅读 · 4 评论 -
【ThinkPHP6.x框架】(21)模板
模版引擎驱动和赋值变量引擎驱动 MVC中,M(模型)和 C(控制器)是前面我们所了解的内容,而V(视图)就是页面。TP6.0默认不自带TT模版引擎,它作为一个可选的扩展给开发人员安装。也就是说,并不一定非要使用模板引擎的语法规则来开发V(视图)部分。如果不用模版引擎,可以在控制器通过require()方法引入PHP文件混编即可;如果要使用模版引擎,先创建一个用于测试模板引擎的控制器:Show.php,写入模版引擎的调用语法,来判断,是否已经安装了模板引擎扩展:r...原创 2021-07-27 14:28:01 · 908 阅读 · 0 评论 -
【ThinkPHP6.x框架】(22)Session、Cookie、缓存
SessionSession在使用Session之前,需要开启初始化,在中间件文件middleware.php:// Session初始化\think\middleware\SessionInit::classTP6.0不支持原生$_SESSION的获取方式,也不支持 session_开头的函数,直接使用::set()和::get()方法去设置 Session的存取:Session::set('user', 'Mr.Lee'); //设置...原创 2021-07-28 10:14:42 · 1790 阅读 · 0 评论 -
【ThinkPHP6.x框架】(23)tp框架的附加功能
上传如果要实现上传功能,首先需要建立一个上传表单,具体如下:<form action="http://localhost/tp6/public/upload" enctype="multipart/form-data" method="post"><input type="file" name="image"> <input type="submit" value="确定"></form>...原创 2021-07-28 11:34:25 · 508 阅读 · 0 评论 -
【ThinkPHP6.x框架】(24)异常与日志处理
异常处理系统输出的异常信息比 PHP原生的要人性化的多,但需要开启调试模式。如果你想更改异常页面的样式、布局之类的,可以修改这个页面:vendor/topthink/framework/src/tpl/think_exception.tpl如果你想要直接替换掉异常页面,换成别的,可以在 app.php中进行设置:// 异常页面的模板文件'exception_tmpl' => app()->getThinkPath() . 'tpl/...原创 2021-07-28 12:00:47 · 932 阅读 · 0 评论 -
【ThinkPHP6.x框架】(25)中间件
定义中间件中间件的主要用于拦截和过滤 HTTP请求,并进行相应处理,这些请求的功能可以是 URL重定向、权限验证等等。为了进一步了解中间件的用法,我们首先定义一个基础的中间件,可以通过命令行模式,在应用目录下生成一个中间件文件和文件夹:php think make:middleware Checknamespace app\middleware; class Check{ public function handle($request, \Closure $ne...原创 2021-07-28 14:15:28 · 462 阅读 · 0 评论 -
【ThinkPHP6.x框架】(26)服务系统、事件、多应用
服务系统服务系统,可以将一个类的对象注册到容器中去,方便调用执行。服务的执行优先级较高,在执行主体程序前就已经完成依赖注入。它的作用可以做一些初始化,配置一些参数,扩展插件等等均可。验证码扩展类就使用了服务系统,我们自己创建一个简单的服务:在common目录下创建一个Shut.php类,这个类是被服务的类。//定义一个属性字段protected static $name = 'Mr.Lee'; //设置public static function setName($name...原创 2021-07-28 14:41:53 · 355 阅读 · 0 评论