![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
PHP
PHP是世界上最好的语言
张芝山
这个作者很懒,什么都没留下…
展开
-
laravel-admin安装maatwebsite/excel实现导出功能
需求分析laravel-admin是自带导出功能的,但是并不是能够符合我们的需求,首先它导出的时候,文件的名字,是以当前列表查询的主表为名字其次,字段也不是中文的,那么就需要我们通过compose去安装工具来实现这个功能,当让,用原生的php去实现也是可以的!安装composer require maatwebsite/excel:~3.1.0使用在Admin文件夹下新建一个文件夹,用来存放导出各个列表的导出文件以用户列表的导出为例子,新建导出类UserExport.php 代码内容原创 2020-05-28 16:53:16 · 902 阅读 · 0 评论 -
laravel-admin常见增删改查的处理
本篇主要内容后台最常见的功能就是增删改查功能,在使用laravel-admin过程中,有一些功能的特殊显示,需要我们频繁的去查阅文档这里呢,我就总结一下自己遇到的一些常用的,各位看官复制粘贴即可增/改普通必填input框$form->text('code', '品种代码')->rules('required');下拉选项$form->select('open_status', '允许/禁止开仓')->options( [PositionStatus:原创 2020-05-28 16:08:52 · 1292 阅读 · 0 评论 -
laravel-admin实现后台网站设置功能
故事背景由于项目更换了负责人,新的决策是后台需要重构,弃用原来layui+jsonp+lumen的前后端分离架构设计,采用laravel-admin 快速部署后台,初次接触这个开箱式的工具类去搭建后台,发现有诸多的坑需要填补,所以从这篇文章开始,将自己近半个月多来的收获进行总结。在此过程中我会通过将代码分块解说,在文末附上完整代码进行叙述。本篇内容实现后台的网站设置功能,大致的功能如下:代码部分首先是配置路由app\Admin\routes.php//基础设置$router-&原创 2020-05-28 15:06:09 · 1054 阅读 · 0 评论 -
Go基础知识复习之goroutine
上一篇我们已经知道go语言的strconv包今天介绍goroutine在go里面 每一个并发执行的活动成为goroutinegoroutine可以认为是轻量级的线程,与创建线程相比,创建成本和开销都很小当一个程序启动的时候,只有一个goroutine来调用main函数,称它为主goroutine,新的goroutine通过go语句进行创建。在函数的使用前面增加关键字 go 就可...原创 2020-04-28 17:59:16 · 210 阅读 · 0 评论 -
Go基础知识复习之strconv包
上一篇我们已经知道go语言的时间相关的time包今天介绍strconv包这个包 可以理解成 从字符串中 解析成 其他数据类型的值通常我们转类型一般是这样比如 int32的整数转成 int64i := int32(200)i2 := int64(i)//打印值fmt,Println(i2)//打印类型fmt.Printf("%T \n",i2)如果强制将整数转成字符串 会...原创 2020-04-13 16:17:57 · 138 阅读 · 0 评论 -
Go基础知识复习之time包
上一篇我们已经知道go语言的文件读写以及bufio包获取用户输入今天介绍和时间相关的time包原创 2020-04-13 15:30:19 · 136 阅读 · 0 评论 -
Go基础知识复习之文件读写以及bufio包获取用户输入
上一篇我们已经知道go语言的包的应用今天介绍文件读写以及bufio包读方法1 根据数据量大小 读取文件封装函数 readFromFile1()import( "os" "fmt" "io") func readFromFile1(){ //导入os包 打开文件 fileObj,err := os.Open("./main.go") //如果打开失败 if err !...原创 2020-04-13 11:38:15 · 211 阅读 · 0 评论 -
Go基础知识复习之包的应用
上一篇我们已经知道go语言的结构体今天介绍包在前面的学习中 我们经常会导入包 比如导入 fmt 包import "fmt"那我们自己能否自定义包 提供给我们的程序进行使用呢?当然可以创建包的过程中,包名和文件夹名通常是相同的一个文件夹只能有一个包包的函数如果要提供给其他程序使用 那么首字符要大写!包不需要有main函数 main函数是要编译的文件才需要有的导入语法:im...原创 2020-04-13 10:18:53 · 73 阅读 · 0 评论 -
Go基础知识复习之接口
上一篇我们已经知道go语言的结构体今天介绍接口所谓接口,我粗略的理解是一个F类下面有A方法 这个A方法 只有方法名还有参数 没有函数内容然后z类去实现这个F类,此时z类就必须有一个同名的A方法,否则无法实现F类如果F类不止一个方法 那么实现它的其他类型 也要有对应的方法 缺一不可!!!那么我们称 F就是一个接口在Go语言中 接口也是跟结构体一样 属于一种类型语法:type 接...原创 2020-04-10 16:56:31 · 160 阅读 · 0 评论 -
Go基础知识复习之结构体
上一篇我们已经知道go语言的自定义类型和类型别名今天介绍结构体在go语言中,没有类的概念,所以也不支持类型的继承都是通过结构体的内嵌再配合接口这样的好处是 比面向对象具有更高的扩展性和灵活性我们可以偷偷的理解成 结构体是一个类! 里面的属性理解成 类的属性语法:type 结构体名 struct {}用法://创建一个结构体 具有属性 name(字符串类型)type pers...原创 2020-04-10 14:10:02 · 153 阅读 · 0 评论 -
Go基础知识复习之自定义类型和类型别名
上一篇我们已经知道go语言的闭包今天介绍自定义类型和类型别名自定义类型的概念创建一个新的类型语法:type 类型名 数据类型用法:type myInt int示例:package mainimport "fmt"//自定义一个类型 myString 属于字符串类型type myString stringfunc main(){ var str myString...原创 2020-04-09 16:30:37 · 208 阅读 · 0 评论 -
Go基础知识复习之闭包
上一篇我们已经知道go语言的函数,defer,函数类型今天介绍闭包闭包是什么?闭包就是 函数和它的外部变量的引用可以说 闭包也是一个函数 它的特点是 包含了外部作用域的一个变量底层原理函数作为返回值函数内部查找变量的顺序:先在内部查找,找不到再到外部查找基本用法package mainimport "fmt"//demo1func f1(f func()){...原创 2020-04-09 11:57:18 · 150 阅读 · 0 评论 -
Go基础知识复习之函数,defer,函数类型
上一篇我们已经知道go语言的map今天介绍函数和defer函数在我们前面关于go的所有文章中 很经常看到 func main()的内容这个就是主函数 这个函数有个特点 就是不会有返回值 不会有参数可以看到 函数的关键字就是func在定义函数过程中 如果有定义返回类型的 就必须要return换言之,有retrun就必须声明返回值的类型(多个返回值 就需要用括号包裹起来)并且 go...原创 2020-04-08 17:43:58 · 138 阅读 · 0 评论 -
Go基础知识复习之map
上一篇我们已经知道go语言的指针,make,new今天介绍mapmap是一种无序的 key-value 的数据结构属于引用类型必须初始化才可以使用 (通过make)语法:var 变量 map[key]value用法://表示 定义一个map key是整型 string是字符串var m1 map[int]string 示例://声明一个mapvar m1 map[st...原创 2020-04-08 14:11:04 · 138 阅读 · 0 评论 -
Go基础知识复习之指针,make,new,切片知识的补充
上一篇我们已经知道go语言的append和copy今天介绍指针指针和new关于指针的知识点,记住两个符号:* 根据地址获取对应的值* 获取地址值关于new,作用是:用来给基本类型申请内存的 如 int string 返回的是 对应类型的指针示例:package mainimport "fmt"func main(){ a := 18 //获取地址值 fmt.P...原创 2020-04-08 10:54:54 · 176 阅读 · 0 评论 -
Go基础知识复习之append和copy
上一篇我们已经知道go语言的切片基本用法今天介绍append和copyappendappend切片添加元素语法:append(切片的变量名,元素)用法://初始化一个切片s1 := []string{"beijing","shanghai","guangzhou"}fmt.Println(s1) //[beijing shanghai guangzhou]//往s1添加一...原创 2020-04-07 17:31:20 · 293 阅读 · 0 评论 -
Go基础知识复习之切片
上一篇我们已经知道go语言的数组今天介绍切片切片语法:var s1 []int和数组的区别在于 长度是可变的 ,而数组的长度是固定的因此定义切片的时候 不需要像数组那样定义长度如:var arr [...]int 或 var arr [3]intlen() 求切片的长度长度很好理解 就是 有几个元素 就是多少长度用法:var s1 []ints1 = []int{1...原创 2020-04-07 15:56:14 · 171 阅读 · 0 评论 -
Go基础知识复习之数组
上一篇我们已经知道go语言中的运算符今天介绍go的数组数组的定义数组的定义过程中 长度是必须要声明的如果数组的长度是不明确的 那就用 [...] 进行定义长度如果没有声明长度 那么就不是数组 而是切片关于切片 后续会单独讲到!!!var 数组名 [数组长度]数组类型//如 定义一个名为userList数组 长度为3 存放的数据是字符串var userList [3]strin...原创 2020-04-01 16:47:08 · 138 阅读 · 0 评论 -
Go基础知识复习之if判断和for循环
上一篇我们已经知道go语言中的if判断和for循环今天介绍go的switchswitch的使用场景跟if很相像基本用法 switch 表达式 { case 表达式的值1 : 操作语句 case 表达式的值2 : 操作语句 case 表达式的值3 : 操作语句 default: }示例新建文件夹switch 在文件夹下新建main.gopackage main...原创 2020-04-01 11:35:13 · 250 阅读 · 0 评论 -
Go基础知识复习之判断和循环
上一篇我们已经知道go语言中的数据类型中的字符串类型今天介绍go的if判断和for循环if的基本用法if判断的 表达式 是不需要用括号包裹起来的如果有多个表达式 可以用;分开单个条件age := 18if age > 18{ fmt.Println("大于18才会输出!")}多条件//情况1sex := 1if sex == 0 { fmt.Println("...原创 2020-03-31 15:20:39 · 272 阅读 · 0 评论 -
Go基础知识复习之数据类型的字符型
上一篇我们已经知道go语言中的 fmt包的常用占位符今天介绍go的数据类型的字符串Go语言中 字符串和字符是有区别的字符串:用双引号包裹起来的 都是字符串 如 "hello world"字符:用单引号包裹起来的都是字符(字符就是一个字母 汉字 符号) 一个字符等于一个字节 ,字符通常都是int32 如 'H'以下符号需要转移也就是要以这些作为字符作为输出结果的时候需要进行斜杠的...原创 2020-03-30 17:33:05 · 116 阅读 · 0 评论 -
Go基础知识复习之常用fmt占位符
上一篇我们已经知道go语言中的浮点型和布尔型在前几篇文章中 我们可以看到很常见的东西fmt今天介绍Go语言中的fmt输出函数的占位符的一些使用记录通过代码示例新建文件夹fmt 在文件夹下新建main.go 编写以下代码:package mainimport "fmt"func main(){ i := 100 //fmt输出类型 fmt.Printf("%T \n"...原创 2020-03-30 11:43:21 · 120 阅读 · 0 评论 -
Go基础知识复习之数据类型的浮点型和布尔型
上一篇我们已经知道go语言中的整型以及整型之间的进制转换输出今天介绍go的浮点型和布尔型浮点数在Go语言中 浮点数默认都是 64位定义默认的浮点数f1 := 1.2345强制定义32位的浮点数f2 := float32(1.23456)通过编码熟悉新建一个文件夹float 在文件夹下创建main.go 编写以下代码:package mainimport "fmt"...原创 2020-03-30 11:24:00 · 1048 阅读 · 0 评论 -
Go基础知识复习之数据类型的整型
上一篇我们已经知道go语言中的常量和iota(常量计数器)的相关知识今天介绍go的数据类型之一:整型在go语言中 整型分为两大类有符号:int8 int16 int32 int64有符号的在32位操作系统上 默认是int32,在64位操作系统上 默认是int64无符号:uint8 uint16 uint32无符号的在32位操作系统上 默认是uint32 在64位操作系统上 默认是u...原创 2020-03-30 10:49:15 · 276 阅读 · 0 评论 -
Go基础知识复习之常量和iota
上一篇我们已经知道go语言中的变量的多种声明方式以及赋值的写法今天介绍go的常量 以及一个新的东西 iota常量的声明声明常量的关键字是 const常量 我们可以理解成那些 不会轻易变动的 都是属于常量的范畴(个人理解)普通声明const p = 123批量声明(每个常量都有值)const ( a = 1 b = 2 c = 3)批量声明 (部分没有设置值)//此...原创 2020-03-28 18:30:58 · 170 阅读 · 0 评论 -
Go基础知识复习之变量
上一篇我们已经知道go程序的运行和调试的基本方法今天介绍go的变量在介绍变量之前 我补充以下 几个可以先知道的知识点packagepackage 是关键字! 用来声明该文件是来自于哪个包import同样 import 也是一个关键字!当你要使用一些包的时候 就需要导入这个名字func main(){}这个是main包的程序的入口函数 它没有参数 没有返回值 只有main包才一定...原创 2020-03-28 15:47:59 · 144 阅读 · 0 评论 -
Go基础知识复习之初识
从该篇开始我将会采用markdown形式去创作我的博客!希望各位看官能逐渐适应,多多交流,多多支持!hello world不论我们学习哪门语言都是从最简单的hello world开始针对我这几天的学习 我自己是在window下安装了go下载go golang网站 选择版本之后 打开一个新的CMD 输入 go version 就会出现go的版本 表示安装成功!为了规范的开...原创 2020-03-28 14:41:11 · 193 阅读 · 0 评论 -
解决laravel在使用layer图标无法正常显示的问题
出现问题的图标是这样的这时候 查看代码 发现渲染图标的模板页面 写法是这样的此时修改模板渲染的写法 改写如下:查看效果 发现可以正常显示了...原创 2020-03-06 10:59:07 · 441 阅读 · 0 评论 -
手机短信验证码业务逻辑实现
手机验证码是我们日常生活使用软件都会用到的功能那么 假设让我们去做出这个功能 该如何实现呢实现的方法有很多 有的做缓存 有的存库里这边我简单记录后者的实现过程!首先 做一个按钮 将该用户的手机号 进行提交 按钮和ajax的提交代码如下<div class="inputbox phone"> <input type="text" id="phon...原创 2020-02-26 11:24:32 · 2447 阅读 · 0 评论 -
php原生实现解析二维码图片为地址
之所以要用php原生去实现这个功能是因为一直依赖于第三方api的话 如果api挂掉 那么业务就出于瘫痪的状态所以才会采用该方法实现很简单 只需要引入QrReader类库之后 include这个类 就可以使用了目录结构如下:为了验证是否正确 我将一个图片地址放到草料解析的网站出来的结果 进行对比发现是一模一样的结果!类库自取地址:https://downloa...原创 2020-02-04 15:46:23 · 1096 阅读 · 0 评论 -
swoole入门之协程的示例
对协程的理解和实现 可以理解成使用同步的代码 实现 异步的功能这里 使用redis组件 是说明这句话在使用组件之前 需要确认环境中的swoole环境 是否开启了 async-redis的这个配置、如果没有的话 建议对swoole进行重新编译可参考这里https://blog.csdn.net/zhangzeshan/article/details/102568239...原创 2019-12-15 17:57:34 · 847 阅读 · 0 评论 -
swoole入门之进程的使用示例
关于进程的概念不在叙述在这里 我将使用 swoole创建的进程的方法 去说明 swoole如何使用进程提高某些业务的效率首先 先介绍swoole关于进程的使用创建一个文件 process.php这个文件 可以理解成是一个父进程接下来就是创建进程 所创建的进程 都是属于这个父进程的 所以 大家都是子进程!启动这个子进程那么接下来 我们要在这个子进程中 去开...原创 2019-12-15 17:49:29 · 274 阅读 · 0 评论 -
swoole入门之Memory的示例
简略记录swoole的memory的内存模块中的table模块首先是实例化table类 1024表示最大行数之后给这个内存表增加一列 有点类似于定义字段三种数据类型 其中 string类型 需要指定长度之后 我们去设置行的数据 这里可以理解为插入一条数据此时的key 就是zzs那么要获取这个key的值只需要$res = $table->g...原创 2019-12-15 17:16:31 · 76 阅读 · 0 评论 -
swoole入门之异步读写文件
简略减少 如何通过swoole实现 异步读写文件一、读创建一个文件 read.php<?php/** * * 异步读取文件内容 * * *//** * 读取文件 * $filename 文件名 * $fileContent 文件内容 * swoole_async_readfile(__DIR__."/read.txt",function($filen...原创 2019-12-15 16:58:33 · 168 阅读 · 0 评论 -
swoole入门之Task
文档是我们最好的朋友!swoole的功能很多 笔者也是刚接触不久 在接下来的文章 我都会一次去记录学习swoole的入门过程中的过程!我都是先对代码依次解读 加上自己的理解 尽量说的通俗之后会贴上代码demo如看官心急直接划到底部!关于Task 有两个函数需要介绍一、swoole_timer_tick 每隔几秒执行一次 有点类似于 js的setInterval()二、s...原创 2019-12-15 16:47:45 · 79 阅读 · 0 评论 -
swoole入门之创建websocket服务(面向对象)
本文在上一篇文章的基础上 对代码进行完善讲面向过程改成面向对象<?php/*** * * websocket 基础类库 * */class WS{ const HOST = "0.0.0.0"; const PORT = 9504; public $ws = null; public function __construct(){...原创 2019-12-15 16:26:26 · 278 阅读 · 0 评论 -
swoole入门之创建websocket服务(面向过程)
文档是我们最好的朋友!swoole的功能很多 笔者也是刚接触不久 在接下来的文章 我都会一次去记录学习swoole的入门过程中的过程!我都是先对代码依次解读 加上自己的理解 尽量说的通俗之后会贴上代码demo如看官心急直接划到底部!这里先介绍面向过程的写法首先创建服务 也就实现实例化swoole的ws服务类需要注意的是 关于ws 是有几个时间函数的 具体要看文档 ...原创 2019-12-15 16:12:10 · 121 阅读 · 0 评论 -
swoole入门之创建http服务
文档是我们最好的朋友!swoole的功能很多 笔者也是刚接触不久 在接下来的文章 我都会一次去记录学习swoole的入门过程中的过程!我都是先对代码依次解读 加上自己的理解 尽量说的通俗之后会贴上代码demo如看官心急直接划到底部!该http服务是 面向过程的写法首先,实例化swoole的http服务类0.0.0.0 表示监听任意地址 9503是端口号 需要注意...原创 2019-12-15 15:49:48 · 151 阅读 · 0 评论 -
lumen利用laravel-snappy和ZipArchive实现导出pdf和打包pdf的功能
需求就是 需要导出后台列表的某天的某个用户的数据成pdf 如果没有选择某个用户 则打包某天的所有用户的数据成zip这次不再是导出excel了 需要的导出excel 可以参考我之前的文章 https://blog.csdn.net/zhangzeshan/article/details/100549210就是要把这样的表格形式 导出成pdf首先 我们项目...原创 2019-11-08 22:29:51 · 777 阅读 · 0 评论 -
Supervisor守护进程的使用记录踩坑
使用守护进程的目的是因为自己使用lumen项目的时候 安装了laravel-S的依赖工具 制作websockt服务端但是存在一个问题 就是执行开启服务端的命令 需要一直保持xshell工具的长时间待命一旦关闭xshell工具 就会出现websocket服务端的停止曾经试过nohup 但是如果用于生产环境是不适合的 所以就准备踩坑首先分清三个关于supervisor的概念:s...原创 2019-10-24 16:33:41 · 698 阅读 · 0 评论