后端技术
主要记录Yii2,PHP等WEB后台开发的技术笔记
外来物种
全栈工程师
展开
-
PHP 之极速生成唯一编码字符的方法
▪ 前言经常有项目需要使用一些邀请码、激活码、兑换码等唯一的编码!通常的做法是随机生成一个邀请码,然后进行数据库查询匹配,如果已经存在则再随机生成一个,如是循环!但在编码位数有限(比如:8位的邀请码)和已有大量邀请码数据的情况下,上述做法将逐步造成邀请码唯一率生成的概率低下,最终因不停的循环查库导致程序超时或失败!那么有没有一种邀请码的生成方式不需要进行数据库查询匹配,在其生成的时候就能确定唯一邀请码呢?当然有,而且算法很多,但是像普遍的方法(比如利用时间戳、MD5等)生成的邀请码位数都会比较长,如果你原创 2020-12-25 14:01:45 · 882 阅读 · 0 评论 -
物联网开发之 HTTPS 证书
▪ 获取 SSL 证书1. 阿里云提供了免费 SSL 证书:https://common-buy.aliyun.com/?spm=5176.2020520163.c1583915649459.d1583915649459.7bc056a7fdPIsl.7bc056a7fdPIsl&commodityCode=cas#/buy2. 编辑申请到 SSL 证书,将域名和证书绑定:3. 阿里云后台 SSL 证书审核通过,就可以直接下载证书(根据实际情况下载对应环境的证书)..原创 2020-12-09 10:35:59 · 341 阅读 · 0 评论 -
Composer 之 composer.json 配置文件说明
▪ 前言Java 有 Maven, Node.js 有 npm, ROR 有 gem, 这些语言的程序员在开心地使用包管理工具加速开发效率时,PHPer 们还在复制粘贴的黑暗中。PHP 在 Composer 之前,包管理的历史不堪回首。在相当长的一段时间内,如果应用依赖于第三方库,PHPer 们需要拷贝这些库的源代码, 或者通过 PEAR、PECL 安装。如果第三方库又依赖于更多的第三方库,那么很快就会进入依赖的黑洞。直到 Composer 出现,PHPer 们看到了属于 PHP 的包管理的曙光。下原创 2020-12-08 09:45:51 · 3298 阅读 · 0 评论 -
Composer 之扩展包安装方法
▪ 问题说明我们经常要往现有的项目中添加新的扩展包,但是很多文档在介绍中一般直接使用 composer update 这个命令,殊不知这可能会对项目造成巨大伤害。因为 composer update 的逻辑是按照 composer.json 指定的扩展包版本规则,把所有扩展包更新到最新版本(注意,是 所有扩展包);举个例子,你在项目一开始的时候使用了 monolog,当时的配置信息是:"monolog/monolog": "1.*",安装的是 monolog 1.1 版本,而一个多月以后的现在,m原创 2020-12-08 09:45:06 · 401 阅读 · 0 评论 -
Yii2 之响应内容协商行为类:ContentNegotiator
根据 Yii2 源码(yii\filters\ContentNegotiator),内容协商(ContentNegotiator)有返回 内容格式 和 内容语言 两种,这里我们主要说一下 内容格式。我们常用的内容格式有FORMAT_RAWFORMAT_HTMLFORMAT_JSONFORMAT_JSONPFORMAT_XMLContentNegotiator 内容协商是干嘛的?它可以分析 Request 的 header,然后指派所需的响应格式给客户端,不需要我们人工指定。Content原创 2020-12-08 09:30:48 · 232 阅读 · 0 评论 -
Yii2 之 RESTful API 实践之一:构建应用主体
▪ 前言做 API 接口时,最土的办法就是按常规 PHP HTML 的写法直接输出 JSON 数据,规则规律完全自己把握。虽然它能很好运行,但是总觉得其不太规范。好在 Yii2 框架中集成了 Restful API,利用其写 API 接口就像当初学习使用 MVC 写代码一样,还是非常值得一试的。▪ 概述在正式开始之前,我们先大概了解下完成一个 RESTful API 需要有哪些工作:Apache 或 Nginx 中开启 Rewrite 伪静态模式。在 Yii2 中新建 api 应用主体,专门用原创 2020-12-08 09:30:16 · 205 阅读 · 0 评论 -
Yii2 运行流程分析之 Controller 的 behaviors() 函数
1. 示例class SiteController extends Controller{ public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [原创 2020-12-08 09:29:39 · 360 阅读 · 0 评论 -
Yii2 运行流程分析之 Controller
1. 继承与实现Controller 继承于 Component, 并实现了 ViewContextInterface 接口。在 Controller 重要的有两块: action, view。2. actions()public function actions(){ return [];}在自定义的 XXController 类中可以看见各种 actionXXX 函数:actionIndex, actionCreate而 actions() 用于添加额外的 action 函数,原创 2020-12-08 09:28:58 · 289 阅读 · 0 评论 -
Yii2 运行流程分析之 Application
1. 应用入口入口文件:# web/index.php(new yii\web\Application($config))->run();2. 创建ApplicationApplication 构造函数# yii\base\Application.phppublic function __construct($config = []){ Yii::$app = $this; static::setInstance($this); $this->st原创 2020-12-08 09:28:23 · 245 阅读 · 0 评论 -
Yii2 之数据库命令 createCommand 常用用法
不同于 ActiveRecord 的使用,采用 createCommand 你可以使用相对原始的写法操作数据库,比如直接执行 SQL 查询、通过数组的方式将数据写入到数据等等▪ 创建命令Yii::app()->db->createCommand(); # 全局可用parent::getDb()->createCommand(); # 仅可用于集成自 ActiveRecord 的类Yii::app()->db->createCommand($sql); # 带 $原创 2020-12-08 09:27:51 · 1693 阅读 · 0 评论 -
Yii2 之数据库模型 ActiveRecord 常用用法
▪ 简介ActiveRecord 直译为 活动记录,以下简称 AR。一个 AR 类关联一张数据表, 每个 AR 对象对应表中的一行,对象的属性(即 AR 的特性 Attribute )映射到数据行的对应列。更详细的资料参见 官方手册。▪ 常用的静态方法# 定义类class Customer extends ActiveRecord{ // ...}在 官方手册 里简单的介绍了 AR 的常用用法,包括 new 和 静态 方法的使用:new Customer(); 通过 new 一原创 2020-12-07 11:07:13 · 373 阅读 · 0 评论 -
Yii2 视图变量的赋值和使用
▪ HTML 转义为了过滤从最终用户来的数据以避免XSS攻击。应该通过调用 yii\helpers\Html::encode() 编码纯文本,例如:<?php use yii\helpers\Html; ?><div class="index-div"> <h1><?= Html::encode($this->title) ?></h1></div>注:title 是 YII 视图类中预定义的一个成员变量,所以原创 2020-12-07 11:05:42 · 500 阅读 · 0 评论 -
Yii2 之增加 SQL Server 支持(Windows 环境)
▪下载 ODBC Driver(数据库链接驱动)并安装根据需要选择 ODBC Driver 并进行安装:Microsoft® ODBC Driver 11 for SQL Server® - Windows (支持Sql Server® 2005)https://www.microsoft.com/zh-CN/download/details.aspx?id=36434Microsoft® ODBC Driver 13 for SQL Server® - Windows + Linux (支持最.原创 2020-12-07 10:02:42 · 360 阅读 · 0 评论 -
Yii2 速查表:数据验证规则
▪ 前言https://nai8.me/tool-sc.html更详细的参见官方手册的 输入验证 和 核心验证器,以下仅整理出常用的方法以供参考▪ 示例▪ 默认值['email', 'default', 'value'=>'lengdo@163.com'] ▪ 去除首尾空白字符['email', 'trim']['email', 'filter', 'filter'=>'trim'] ▪ 使用自定义函数过滤并赋值['sex', 'filter', 'filter'=原创 2020-12-07 09:50:37 · 383 阅读 · 0 评论 -
Yii2 之生成 URL 的方法
▪ 前言在项目中,推荐使用 Yii2 内置的 URL 工具类生成链接,这样可以非常便捷的管理整站的 URL 行为:比如通过修改配置改变整站的URL格式等。URL 更多高级的用法参见 官方文档,这篇文章仅仅介绍 Yii2 生成 URL 的几种方式。Yii2 默认的 URL 链接格式Yii2 默认的 URL 链接格式是指为开启 URL 美化时的格式。未启用子模块的 URL 格式:// 参数 r 中的 article 表示控制器, view 表示动作http://www.example.com/i原创 2020-12-07 09:49:38 · 576 阅读 · 0 评论 -
Yii2 整合 Color Admin 后台 UI 库
▪ 环境基于 Yii2 高级模板 和 Color Admin 2.2▪ 后台 UI 库通常做后台的时候我们都会选择一个成熟的 UI 库,既省心又省力:BootstrapZUIamazeUI…以上都是一些优秀的 UI 开源库,你随时通过下载、GitHub 甚至于 Composer 等方式获取。相比我更喜欢 Color Admin;但因为它是收费的,所以基本上目前你无通过 GitHub 和 Composer 方式获取,只能通过付费下载的方式获取。接下来我将详解一下如果将 Color Ad原创 2020-12-07 09:48:42 · 384 阅读 · 0 评论 -
Yii2 之日志实践总结
▪ 前言Yii2 详细的日志使用参见 官方教程,这里我们仅对 Yii2 日志相关的疑难问题做些笔记以及在人性化方面做一点点的小改造。▪ 消息跟踪级别在官方教程中有个 消息跟踪级别 的配置:'components' => [ 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [...], ],],官方的说明是:上面的应用配置设置了 yii\log\Dispa原创 2020-12-07 09:47:24 · 570 阅读 · 0 评论 -
Yii2 中如何彻底禁用掉自带的 Yii、JQuery 和 Bootstrap 脚本
▪ 环境基于 Yii2 高级模板▪ 前言默认情况下,Yii2 会自动加载 Yii、JQuery 和 Bootstrap 等脚本和样式,但有时项目中可能并不需要这些库,或者使用其他版本;下面介绍如何去掉这些库脚本和样式。▪ 去除 Yii.js 相关脚本编辑 frontend\asset\AppAsset.php 文件,注释掉变量 $depends 里的 'yii\web\YiiAsset' 值。编辑 frontend\config\main.php 文件,在字段 'components' 下面添原创 2020-12-07 09:42:46 · 384 阅读 · 0 评论 -
Yii2 之错误处理深入分析
▪ 前言在 Yii2 使用中,我们发现一但程序出现错误,Yii2 就能自动显示其专用的错误提示界面,和我们写原生态时出现的错误提示界面完全不一样。它究竟是怎么做到的呢:是在哪里设置监听的?亦或在哪里用的try catch?”。其实 PHP 有自己专用的错误处理 API, 当程序出现问题时,可以自动调用指定函数。而 Yii2 正是利用这一点,在其启动的时候,使用 PHP 内置的 set_error_handler 将自己的错误处理注册进步并关闭 PHP 自身的错误显示。▪ Yii2 错误自定义处理在原创 2020-12-07 09:46:20 · 886 阅读 · 0 评论 -
Yii2 删除原生的 frontend 和 backend 模块并自定义新的模块
▪ 环境基于 Yii2 高级模板▪ 前言Yii2 默认的高级模板会自动创建 frontend 和 backend 两个模块,实际开发中可能用不到这两个模块或者想改变这两个模块的名称,以下将介绍如何创建自己的项目并跟 Yii2 结合的具体过程,以及如何安全的删除 frontend 和 backend 目录。▪ 新建 kernel 项目拷贝应用根目录下的 /environments/dev/frontend 并重命名为 kernel。拷贝应用根目录下的 /environments/prod/原创 2020-12-07 09:38:06 · 215 阅读 · 0 评论 -
Yii2 路由之同时支持 URL 原始和美化的请求
▪ 前言刚学习 Yii2 的时候我们都是直接采用了 URL 原始访问方法:http://frontend.domain.com/index.php?r=index/site/indexhttp://frontend.domain.com/index.php?r=index/article/view&id=1...经过一段时间的学习,我们又学会了 URL 美化:http://frontend.domain.com/index/site/index.htmlhttp://frontend原创 2020-12-05 11:57:08 · 192 阅读 · 0 评论 -
Yii2 第三方类库安装和使用:Imagine
▪ ImagineImagine 是一个面向对象的 PHP 类库用于图片操作。这个类库能够处理一些常用到的操作如:调整大小、裁剪、应用过滤器等。其Color类库可用于对任意对定的颜色生成RGB值。并且还提供一些方法来绘制图形如:圆弧,椭圆,线,片等。此外,还可以利用一个灵活的字体类来加载任意字体文件,然后将文字插入到图片中。Imagine 是一个会经常更新的类库,将来还会实现:图表生成、圆角过滤器等功能。▪ Yii2 安装 ImagineImagine 的手动下载和安装这里就不做介绍了,可自行百原创 2020-12-05 11:56:30 · 279 阅读 · 0 评论 -
Yii2 初始化安装
▪ 环境基于 Yii2 高级模板▪ Yii2 高级模板Yii2 高级模板(GitHub)主页Yii2 高级模板(GitHub)帮助索引页▪ Yii2 安装和初始化Yii2 通过 Composer 安装,具体安装自行参考官方文档或者上面的链接内容。Yii2 安装完以后,按照官方文档接下来就需要进行初始化 ./init,此处初始化时我们选择 Development 模式,初始化后会产生以下文件:generate backend/config/main-local.phpgenerate b原创 2020-12-05 11:55:56 · 276 阅读 · 0 评论 -
Yii2 表单模型的场景使用
▪ 前言Yii2.0 的表单模型里我们经常 scenarios,直译过来就是场景的意思,究竟其有什么作用呢?举个简单的例子,例如管理员填写表单里面有 username 和 password 两个的字段,当新增一个管理员时两个字段全部是必填项;但是修改的时候,只用 username 字段必填,password 可以不填。正常的情况下,新增时的规则:[['username','password'], 'required'],而编辑时的规则:[['username'], 'required'] 就可以了。但原创 2020-12-05 11:55:10 · 296 阅读 · 0 评论 -
Yii2 安装 apidoc 过程以及错误处理
▪ 前言以前一直觉得 Composer 很可怕,动不动就报错,的确表面上看很可怕。但其实,只要仔细分析它给出的错误提示,按图索骥,是可以解决问题的。那今天我就记录下我 Composer 安装 yiisoft/yii2-apidoc 2.1.0 时解决错误的过程。▪ 准备首先,我安装 yii2-apidoc 的时候,很慢,于是百度了一下,嗯,这个需要切换成中国镜像就快了,参 Composer中文网,配置镜像的命令:$ composer config -g repo.packagist compos原创 2020-12-05 11:54:31 · 355 阅读 · 0 评论 -
Yii2 之 frontend 子模块实践之四:路由美化
▪ 环境基于《Yii2 之 frontend 子模块实践之一:添加前后台子模块》。基于《Yii2 之 frontend 子模块实践之二:构建子模块的独立配置》。基于《Yii2 之 frontend 子模块实践之三:布局和语言配置》。▪ 前言到目前为止,我们都是通过以下的 URL 访问 子模块:# 前台 index 子模块http://frontend.domain.com/index.php?r=index/site/indexhttp://frontend.domain.com/in原创 2020-12-05 11:50:49 · 237 阅读 · 0 评论 -
Yii2 之 frontend 子模块实践之三:布局和语言配置
▪ 环境基于《Yii2 之 frontend 子模块实践之一:添加前后台子模块》。基于《Yii2 之 frontend 子模块实践之二:构建子模块的独立配置》。▪ 配置子模块的布局既然启用了 子模块,那么我们就希望每个 子模块 的布局文件直接放到其根目录之下,例如 [Sub Module Path]/views/layouts/,这样就比较利于管理。在 《Yii2 之 frontend 子模块实践之一:添加前后台子模块》 文章中,我们通过在 子模块 根目录下 Module.php 文件里的原创 2020-12-05 11:50:12 · 150 阅读 · 0 评论 -
Yii2 之 frontend 子模块实践之二:构建子模块的独立配置
▪ 环境基于《Yii2 之 frontend 子模块实践之一:添加前后台子模块》。▪ 前言默认情况下,两个 子模块 直接使用 应用主体 的配置:/frontend/config/main.php,这其实是一个非常大的坑:当你想前台启用 URL 美化的时候,你修改了 /frontend/config/main.php 并启用成功,但是此时你会发现后台居然也跟着启用了URL美化,这并不是你所想要的当你在 /frontend/config/main.php 设置了后台的管理员身份验证类 'ident原创 2020-12-05 11:48:33 · 243 阅读 · 0 评论 -
Yii2 之 frontend 子模块实践之一:添加前后台子模块
▪ 环境基于 Yii2 高级模板▪ 前言高级模板默认将前后台分离:frontend 前台应用 和 backend 后台应用,在使用时我们需要为这两个应用分别绑定域名,例如:frontend.domain.com,backend.domain.com在我们常规的项目开发中,这种前后台独立分离的方式可能导致一些潜在的问题,最明显的问题比如:在后台 backend 上传图片后(例如:/uploads/pic01.jpg),前台 frontend 无法直接访问通过 /uploads/pic01.jpg原创 2020-12-05 11:47:28 · 435 阅读 · 0 评论 -
PHP 之 PhpSpreadsheet 速查表
PHPEXCEL 由于版本陈旧性能低下 官方放弃维护,转而开发PhpSpreadsheet 用了最新得psr标准因而对php版本不向下兼容需要注意!PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式:ods, xls, xlsx, csv, pdf, html构建PhpSpreadsheet 提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,Ph...原创 2020-12-03 16:57:12 · 242 阅读 · 0 评论