- 博客(70)
- 资源 (2)
- 收藏
- 关注

原创 LeetCode刷题复习目录
也可作为刷题顺序复习动态规划篇案例:【LeetCode NO.70】爬楼梯扩展:矩阵图类的动态规划:【LeetCode NO.62】不同路径【LeetCode NO.62】不同路径Ⅱ其他:【LeetCode NO.120】三角形最小路径和...
2020-08-31 17:56:44
191

原创 Solved Issues
001-Issue:ModuleNotFoundError: No module named 'IPython.core.inputtransformer2'conda install IPython==7.3python -m ipykernel install --user --name env--display-name 'dis_name'
2019-06-01 17:06:43
562
1
原创 【ThinkPHP6.x/微实战】(6)搜索器结合分页
搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式,一个搜索器对应一个特殊的方法(该方法必须是public类型),方法命名规范为:searchFieldNameAttrFieldName为数据表字段的驼峰转换,搜索器仅在调用withSearch方法的时候触发。搜索器的场景包括:1.限制和规范表单的搜索条件;2.预定义查询条件简化查询; 举个例子,在如下的页面中,如果搜索字段全部为...
2021-08-02 21:43:22
577
原创 【ThinkPHP6.x/微实战】(5)搜索表单 UI设计
这部分涉及到一些前端代码如下:<!--搜索和表单--><form action="{:url('/user') }" class="pb-3"> <div class="form-row"> <div class="col-form-label"> <label for="username">用户名:</label> </div> <...
2021-08-02 21:22:27
320
原创 菜鸟的最后一篇go教程
为什么要起这个名字?其实其中回答了何种人适合看这篇文章——有其他语言基础刚入web后端的初学者。本文主要是对黑马程序员的go基础教程部分做了精简,有基础的能节省不少时间。姊妹篇:菜鸟的最后一篇php教程。...
2021-08-02 09:23:30
953
原创 【ThinkPHP6.x/微实战】(4)自定义分页类
*这里为了开发方便,先设置自动跳转到user模块中:return redirect(url('/user')); 设置路由后的user页面访问路径为:http://localhost/tp6demo/public/index.php/user 进行重定向之后,访问user页面的路径就直接变成了:http://localhost/tp6demo/public/index.php分页设计先了解下Bootstr...
2021-07-31 19:30:39
597
原创 【ThinkPHP6.x/微实战】(3)用户表及模块创建
在本次实战中,需要建立如下的数据库,数据库名为student,下表为tp_user: 下面需要注意:1)username和email设置为唯一索引,防止重复;2)配置表前缀tp_,位置为config/database.php。模块搭建 可以使用命令快捷新建资源控制器:User.php:php think make:controller User 在controller下会生成该类,并自动构建一些方法:...
2021-07-31 19:04:59
574
原创 【ThinkPHP6.x/微实战】(2)配置环境引入UI
这一篇主要来介绍在tp6环境中引入Bootstrap。在使用tp6框架开发时,一般会做如下的准备工作,这里稍微做一下整理:使用composer命令在指定的目录安装Thinkphp6.x; 修改.env文件,主要是注意配置数据库账号密码、开启调试; 使用命令或直接开启Nginx服务打开首页。引入UI直接将Bootstrap包含js和css文件夹拷贝项目中public/static里,在引用时使用相对路径即可,下面会有实例说明。接着配置config/view.php...
2021-07-31 17:43:04
329
原创 【ThinkPHP6.x/微实战】(1)简介
本课程主要是摘录至这位老师的课程并做了一些精简,没有条件看视频的同学的可以使用该系列文字教程,B站链接:李炎恢 其他的课程我一般不会写简介,但是作为这个课程的简介是很有必要的,因为其中包含了如何真正掌握一门框架的方法。这种微实战,主要的特性如下:尽可能独立模块 不引入其它技术 不考虑各种规范、思想等这种方式对于新接触框架的同学来说,学习路线会更加平滑。因为在实际的项目中,光UI和JS前端这两项,就可能占用项目60~70%的代码量,可是庞大前端代码会...
2021-07-30 20:22:44
188
原创 使用vagrant配置开发环境
今天照着公司教程使用vagrant配置好了开发环境。之前使用Ubuntu子系统配置好了一个,鉴于子系统并不是虚拟化的,所以踩了很多坑...然后抱着学习的心态又将开发环境装了一遍,发现非常丝滑,特此记录一下。Vagrant简介 首先需要了解一下vagrant,简单来说,vagrant是一个操作虚拟机的工具,基于自身的约定,就能很快的完成一套开发环境的部署,并可以打包传播,极大的方便了在工作环境中,各个开发环境不一致的问题,也解决了重复配置环境的浪费。与虚拟化软件的关系...
2021-07-29 19:55:47
255
原创 【ThinkPHP6.x框架】(26)服务系统、事件、多应用
服务系统服务系统,可以将一个类的对象注册到容器中去,方便调用执行。服务的执行优先级较高,在执行主体程序前就已经完成依赖注入。它的作用可以做一些初始化,配置一些参数,扩展插件等等均可。验证码扩展类就使用了服务系统,我们自己创建一个简单的服务:在common目录下创建一个Shut.php类,这个类是被服务的类。//定义一个属性字段protected static $name = 'Mr.Lee'; //设置public static function setName($name...
2021-07-28 14:41:53
423
原创 【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
523
原创 【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
1056
原创 【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
580
原创 【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
2038
原创 【ThinkPHP6.x框架】(21)模板
模版引擎驱动和赋值变量引擎驱动 MVC中,M(模型)和 C(控制器)是前面我们所了解的内容,而V(视图)就是页面。TP6.0默认不自带TT模版引擎,它作为一个可选的扩展给开发人员安装。也就是说,并不一定非要使用模板引擎的语法规则来开发V(视图)部分。如果不用模版引擎,可以在控制器通过require()方法引入PHP文件混编即可;如果要使用模版引擎,先创建一个用于测试模板引擎的控制器:Show.php,写入模版引擎的调用语法,来判断,是否已经安装了模板引擎扩展:r...
2021-07-27 14:28:01
993
原创 tp6实战经验(持续更新)
Session在框架中开启Session,需要在config\middleware.php中输入如下初始化代码:\think\middleware\SessionInit::class 在控制器中,需要引入如下:use think\facade\Session验证码功能 tp中的验证码需要安装,命令如下:composer require topthink/think-captcha在控制器中引入:...
2021-07-26 14:59:43
634
原创 菜鸟的最后一篇php教程
为什么要起这个名字?其实其中回答了何种人适合看这篇文章——有其他语言基础刚入web后端的初学者。本文主要是对菜鸟教程中的PHP部分做了精简,有基础的能节省不少时间。PHP变量的作用域local global:在函数内调用函数外的全局变量时会用到,存储在一个名为 $GLOBALS[index] 的数组中。 static:希望某个局部变量不要被删除时用到,该变量仍然是函数的局部变量 parameterecho 和 print php原生只有这两种输出模式,它...
2021-07-24 17:40:23
777
2
原创 【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
957
原创 【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
499
原创 【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
1573
6
原创 【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
578
原创 【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
696
原创 【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
589
原创 【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
464
原创 【ThinkPHP6.x框架】(12)模型4(自动时间戳、只读字段、数据类型)
自动时间戳和只读字段只支持模型方式,不支持数据库方式。模型自动时间戳 开启设置。全局开启:在database.php中,设置为true;// 自动写入时间戳字段'auto_timestamp' => true,如果你只想设置某一个模型开启,需要设置特有字段://开启自动时间戳protected $autoWriteTimestamp = true;自动时间戳开启后,会自动写入 create_time和 u...
2021-07-21 09:57:10
1381
原创 【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
669
2
原创 【ThinkPHP6.x框架】(10)模型2(获取器和修改器)
模型获取器获取器的作用是对模型实例的数据做出自动处理。一个获取器对应模型的一个特殊方法,该方法为 public。方法名的命名规范为:getFieldAttr()。举个例子,数据库表示状态status字段采用的是数值;而页面上,我们需要输出status字段希望是中文,就可以使用获取器;在 User模型端,我创建一个对外的方法,如下:public function getStatusAttr($value){ $status = [-1=>'删除', 0=>'禁...
2021-07-20 20:06:15
655
原创 【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
636
3
原创 【ThinkPHP6.x框架】(8)数据库进阶4(事务与结果集处理)
事务处理1. 数据库的表引擎需要是 InnoDB才可以使用,如果不是调整即可;2. 事务处理,需要执行多个 SQL查询,数据是关联恒定的;3. 如果成功一条查询,改变了数据,而后一条失败,则前面的数据回滚;4. 比如:蜡笔小新给路飞 3快钱,自己-3,对方+3,这时需要事务处理;5. 系统提供了两种事务处理的方式,第一种是自动处理,出错自动回滚;Db::transaction(function () {...
2021-07-20 14:55:54
579
2
原创 【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
353
原创 【前端】AJAX详解
简介 之前在项目中用到AJAX,是前端的技术,但是感觉作为后端开发者,对它的掌握还是很有必要的。AJAX全称为Asynchronous JavaScript And XML,就是异步的JS和XML。特点是可以在浏览器中向服务器发送异步请求,最大的优势就是无刷新获取数据。XML简介 XML是可扩展标记语言。XML中没有预定义标签,全都是自定义标签,用来表示一些数据。现在已被JSON取代。使用核心对象XMLHttpReq...
2021-07-20 10:59:37
7372
原创 从一个例子理解ThinkPHP6中的自定义验证器
首先有这样的需求:有这样的一个字段(contact),这个字段必须有值,并且邮箱和手机号码均可,那么这里肯定是需要自定义验证规则,我的自定义规则如下:<?phpnamespace app\validate;use think\Validate;class Message extends Validate{ protected $rule = [ 'username' => 'require|max:25', 'contact...
2021-07-14 10:17:23
1176
原创 【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
678
原创 【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
692
1
原创 【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
1047
原创 【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
686
原创 【ThinkPHP6.x框架】(2)相关配置与访问
相关配置开启调试 在根目录的.env文件中有关于框架的相关配置,下面以开启调试模式举例。APP_DEBUG = true; 开启调试模式后的优势:a. 记录系统运行流程的执行过程;b. 展示错误和调试信息,并开启日志记录;c. 模版修改可以及时生效(不会被缓存干扰);d. 启动右下角的 Trace调试功能,更加强大;...
2021-07-08 16:42:54
540
2
原创 【置顶】后端疑难杂症
Directive 'track_errors' is deprecated in Unknown on line 0【Composer】
2021-07-07 21:13:25
178
1
Netron-Step-3.0.3
2019-04-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人