微信小程序商城开发构建全栈应用
发布人:龙兵科技
18-07-04
1-1:
AOP编程思想
看书和实际编码相辅相成。
1-2:
课程技术点:
ThinkPHP5框架,后面三个字母都是大写, 细节 :iOS 首字母小写,Android 首字母大写。
MySQL
微信
小程序 腾讯官方出的小程序作对比
1-3:
课程流程:
服务端
客户端 (客户使用的)
CMS• (产品的管理员使用的)
cms的功能总结:1是基础数据的增删改查,2是特殊操作,比如发送微信消息
1-4:
三端分离概念:
以前的网站 CMS和后端是合起来的 ,当时因为移动端还没有兴起,
现在一般情况下cms也是客户端,不要视为服务端 ,各个端开发。结构清晰。
1-5:
实现通用的 结构良好的产品,
三端分离,
基于REST API,
全称:REST,全称是Resource Representational State Transfer,即:资源在网络中以某种形式进行状态转移。
基于token令牌管理权限,分级 (作用域),
一套架构适配iOS,Android,小程序与单页面,
使用ORM方式与数据库交互,
用面向对象的方式构建前端 (ES6 )
1-6:
知识与技术:
web框架核心知识:路由,控制器,模型
验证器,读取器,缓存,全局异常处理,
ORM:模型与关联模型
1-7:
微信技术点:微信小程序开放给个人。自己注册一个。
微信登录
微信支付(预订单,支付与回调通知处理)
微信模板消息(不能主动向客户推送消息,要在特定情况下才能触发)
1-8:
数据表设计
数据冗余的合理利用
事务与锁在检测库存量中的应用
1-9:
学习要求:
静下心来,慢慢学习。
1-10:
前置知识:
php与面向对象相关知识
thinkphp 框架的基础知识
MYSQL数据库的基本使用
小程序常用API
有一个小程序账号
1-11:
泛化的web
web产品矩阵
公共服务(api)
要能写出易维护的代码,要让代码写的美~
前端绝不等于做界面和特效,也要处理业务逻辑。
1-12:
依赖或者包管理:composer (新手尽量少用)
TP5已经为我们引入了很多插件,尽量少用到第三方,代码侵入,不利于编程逻辑的培养。
1-13:
产品代码会长期维护
知乎专栏:小楼昨夜又秋风
2-1:
环境,开发工具
ThinkPHP 5.07
MySQL
PHP 5.6
Apache/nginx
使用XAMPP(集成安装包)
phpstrom
web开发者工具(VS Code 编写前端代码 更灵活)
Postman
Navicat
2-2:
安装软件
2-3:
安装tp5 :composer 、git 、官网下载
应用项目
核心框架
2-4:
项目独立命名
2-5:
phpstrom快捷使用方式:
setting->keymap
alt +r 最近文件 可筛选
alt +左右键 切换打开的文件
con+shifr+n 搜索所有文件名字
整段注释 con+shift+/
alt+e 代码块选中
新建文件 焦点放在左边项目栏 alt+insert
类中不同的方法快速移动 alt+上下箭头
2-6:
tp5层次结构:
入口文件
应用 包含模块
模块包含 mvc
2-7:
tp5自带web服务器
下方的命令行工具 Terminal
先切换进入public目录下
命令:php -S localhost:8080 router.php 即可(注意端口号不要与已有的web服务器冲突)
可以在这里操作git
2-8:
phpstrom断点调试 XDebug
安装xdebug
配置phpstrom
了解短点调试的几个按钮的作用
2-9:
PATH_INFO URL路径模式:http://servername/index.php/模块/控制器/方法/参数
url可配置是否区分大小写
兼容模式:http://servername/index.php?s=模块/控制器/方法/参数
缺点:太长,会暴露服务器文件结构,不能很好支持url语义化
使用路由解决以上缺点。
3-1:
命名空间:自动在新建类的时候生成,setting->directories 将application定义别名app即可。
3-2:
配置虚拟域名,简化URL路径。
首先 配置虚拟主机,
配置虚拟主机的小技巧:使用apache,在虚拟主机配置文件中,先将localhost配置为一个虚拟主机,否则,当你配置一个虚拟主机的时候,访问localhost就是去访问你配置的那个虚拟主机的路径。
3-3:
安装postman:
将postman的收藏功能用起来,输入网址很麻烦。
3-4:
三种URL访问模式:path_info , 混合,强制。
路由:route.php文件中编写
配置式,
动态注册,think/route类 rule方法 一旦定义路由 原有的path_info失效。
配置中,可混合,可强制。
3-5:
定义路由:
Route:rule()方法的完整参数使用:(路由表达式,路由地址,请求类型,路由参数,变量规则)
请求类型 缺省 是 *,全部的请求类型。
有简化的写法:
Route:get(路由表达式,路由地址) ,方法有get,post,put,delete
3-6:
获取请求参数:
在路由定义里面/:id
在url里面,?name=xxx,
在post的body体里面,
Request类 实例化 instance,param()所有方法传过来的参数,get(),post()
当使用get()获取参数时,只能获取到?后面的参数,获取不到路由里面的参数,
就要使用到route()方法。
助手函数,input('param.')
依赖注入:在方法名中index(Request $request) 在方法里面就可以用了。
3-7:
产品功能讲解与分析:
项目:零食商贩
3-8:
Vavicat安装以及数据库初步设计:
倾向于不用外键约束,
4-1:
Banner(轮播图)数据表设计分析:
有两张图 banner,banner_item
4-2:
Banner接口
方法:根据id获取banner
指明路由和方法,
4-3:
validate 独立验证
内置规则,可自定义验证过则。
new Validate(规则)
->batch()
->check(数据)
->getError()
但是这种独立验证的封装性没有验证器好,以后大多数情况下都使用验证器。
4-4:
验证器
区别 对规则做了更好的封装
新建validate文件夹 类 属性 rules 使用:new 验证类
4-5:
项目结构体系详解:
客户端:cms 和小程序 登录就是获取令牌的过程 重点
小程序 和微信服务器 以及 我们自己的服务器交互
服务端;校验参数->controller ->model/service/logic ->核心框架 异常处理
注意:service 和 model层之间的关系 最好能灵活的同级
小程序的缓存
restful api
4-6:
自定义验证规则:
getBanenrByID
参数 id正整数
自己写(发生错误,新建文件夹的时候,把顺序搞混了,导致接口访问不到!一定要注意)
4-7:
构建接口参数校验层:
上一节 的 也不够精简 复用性不高。
baseValidate基类。
goCheck 获取参数 做校验
拦截器 先使用tp5的默认异常
自己写 没什么问题
5-1:
REST之前的重要协议:SOAP
soap 重 使用xml描述数据 前端调接口的时候 流程复杂 网站后台转发调用
5-2:
restful api 特点解析:
api基于rest理论设计
通常来说 json来描述数据
无状态 ,每次请求不依赖其他接口
基于资源, 使用Http动词来操作资源
传统:区分使用get或者post 是根据参数简单与否来区分,现在:根据动作来区分
eg:删除操作使用delete ,新增操作使用post ,获取操作使用get,更新使用put.
接口名称的定义 尽量用名词而不是动词 。eg:movie/id 而不是:getMovie/id.
5-3:
RESTFul API 最佳实践:
每次http请求都应该响应一个状态码,错误码(自定义 :有文档 ,可查找)和 统一描述错误
状态码:
404 资源没找到
400 参数错误
200 get查询资源成功
201 post创建资源成功
202 put更新成功了(有些设置为请求未响应)
401 无权限
403 禁止访问
500 服务器未知错误 。
统一错误描述信息:错误码,错误信息,当前url.
使用token令牌来授权和验证身份,
传统web用session和cookie,和token比较,token自己的服务器存储管理,灵活。
版本控制。
详细文档。
5-4:
如何学习RESTFul API。
模仿:豆瓣开放api ,github开发者api
合理使用,切勿盲目照搬标砖REST,因为我们面向的是内部人员
6-1:
正确理解异常处理流程:
类同名的情况下别名,
异常层级关系 ->全局异常处理AOP
6-2:
固有的处理异常的思维方式和流程:
现在有个服务器错误,假如1/0,抛出异常 状态码 400
6-3:
异常的分类:
两类:
由于用户行为导致的异常 ,比如参数输入错误 导致没有查询到数据 ,有的返回一个空数组,并不当成异常,有的 返回一个自定义的异常码。
不需要记录日志 ,
需要向用户返回具体的错误信息。
第二就是服务器自身异常,记录日志,不向客户返回具体原因。
6-4:
实现自定义全局异常处理:
新建exception文件夹,
覆盖和重写,
三个类
config 要配置
6-5:
实现已定义全局异常处理 下
render()方法要处理两种不同的异常,
新建文件记录错误码
测试两个异常!
6-6:
日志系统:
先关掉tp5的自动日志记录 ,太多,
有选择的记录日志,
6-7:
在全局异常处理中加入日志记录,
私有方法,记录日志,
手动初始化日志,然后记录日志
6-8:
全局异常处理应用 上:
对于客户端开发人员 json格式比较好,
对于服务端开发人员 网页格式比较好
需要一个开关,
还原父类的render()方法,
配置文件,助手函数
完善goCheck()抛出的异常 定义一个新的自定义异常
6-9:
全局异常处理的应用 中:
构造函数 对成员变量操作 可选参数赋值 异常类
6-10:
全局异常处理的应用 下:
验证器 需要验证多个参数的时候
batch()方法
6-11:
小结与AOP思想:面向切面