小程序
2021-05-17 14:12:47 1 举报
AI智能生成
商城小程序的功能模块讲解
作者其他创作
大纲/内容
小知识
配置虚拟域名,简化前面url路径
在apache的apache\\conf\\extra目录下的httpd-vhosts.conf文件中配置apache的虚拟路由<VirtualHost *:80> DocumentRoot \"D:\\XAMPP\\htdocs\\zerg\\public\" ServerName jecht.com</VirtualHost>
配置hosts文件,使本地可以使用域名127.0.0.1 jecht.com
配置路由,简化后面url路径
编写路由文件:route.php 在config.php中可以设置路由模式有两种路由写法:1:配置写法(PATH_INFO) 2:动态注册写法(路由模式) 3:混合模式
PATH_INFO访问模式
混合模式
强制使用路由模式(原有的PATH_INFO会失效)(推荐)
定义路由:Route::rule(\"路由表达式\",\"路由地址\",\"请求类型\",\"路由参数(数组)\",\"变量规则(数组)\");请求类型:GET,POST,DELETE,PUT,*
use think\\Route;Route::rule(\"hello\
TP5的方法:Route::get(\"hello\
在路由内传递参数:(为了在操作方法function hello内获取参数)在url路径内传参数:Route::get(\"hello/:id\
前期准备
环境、工具的安装
1.下载安装XMAPP:一种打包安装php、mysql、apache的工具
2.微信客户端的安装
3.thinkphp5.7框架源码包的下载安装(think-5.07、farmework-5.07)
4.安装php开发IDE——phpstorm
5.安装接口的测试工具——PostMan
项目文件夹的命名
服务器程序:Zerg(重命名think-5.07——Zerg,framework-5.07——Zerg/thinkphp)
客户端小程序:Protoss
CMS后台管理系统:Terran
TP5目录层次结构(官方文档:https://www.kancloud.cn/manual/thinkphp5/118003)
入口文件(可以有多个)
Zerg/public/index.php
1.定义应用目录2.加载框架引导文件
应用目录(Zerg/application/)
模块文件夹(包含多个模块)(Zerg/application/index/)
有多个控制器,控制器中有多个action,通过action方法调用业务层返回view
业务层(model)
控制器(cortroller)(class Index)
动作(action1)(public function index())
动作(action2)
默认文件
route.php
子主题
database.php
数据库配置
config.php
服务配置文件
command.php
公共函数文件
verdor
存放第三方类库,或插件类库
thinkphp
官方核心框架目录
runtime
缓存、日志文件夹
public
外部站点目录(可以直接访问)
extend
存放第三方类库
前期设计
数据库的设计
研究sql文件中,对数据插入的技巧
banner轮播图的编写
url:application/api/controller/Banner/v1/Banner.php
携带参数的路由编写:use think\\Route;Route::post(\"Banner/:id\
接口编写:class Banner{ public function GetBanner($id) }
测试:jecht.com/Banner/123
TP5的validate构建参数验证层
用法
独立验证(对数据对象配置传递规则)
通过TP5内置的规则库对数据data的去进行规则设置(可查询官方文档查看)如:name的取值设置为必须填写且 最大值不超过10 email的去只需要符合email格式
验证器(推荐) 封装性更好
采用TP5库内的规则
配置的数据规则在TestValidate中属于成员属性变量,可见性是protected默认的变量为$rule
自定义规则
架构图
支付流程
img src=\
小程序
构建验证层
验证层用于传入参数时验证参数的正确性
1.建立BaseValidate的goCheck()方法,作为获取http传入参数,并对参数进行校验的功能
use think\\Exception;use think\\Request;use think\\Validate;class BaseValidate extends Validate{ public function gocheck(){ //获取http传入参数 //对参数做校验 $request = Request::instance(); $params = $request->param(); $result = $this->check($params); if (!$result){ $error = $this->getError(); throw new Exception($error); } else{ return true; } }
2.建立Validate校验库,用于各种数据传参时的校验,引用BaseValidate,编写校验规则
class IDMustBePositiveInt extends BaseValidate{ protected $rule = [ \"id\" => \"require|isPositiveInteger\
3.在建立每个控制器时,需要对传入的参数进行校验,校验直接可以调用其中的校验器例如IDMustBePositiveInt()的gocheck方法
use app\\api\\validate\\IDMustBePositiveInt;class Banner{ public function GetBanner($id) { (new IDMustBePositiveInt())->gocheck(); }}
构建全局异常处理层
操作数据库
DB的querry()方法把数据从数据库中查询出来
构建TP5的数据库访问层
DB操作数据库接口
Drivers驱动器
Collectioon判断数据库类型
Builder生成器处理差异
Query查询构建器
包含数据的读写操作
链式方法的注意点:1.链式方法只能在sql执行方法之前2.不同的链式方法之间的位置关系可以无顺序的3.相同的链式方法之间的位置关系是有顺序的(例如两个order)
ORM(关系对象映射)对象模型和关联模型
Bannermodel继承了Model:class Banner extends Model在编写业务逻辑时:$Banner = BannerModel::GetBannerByID($id):返回一个数组$Banner = BannerModel::get($id):返回一个业务对象,方便对对象进行后续操作
关联模型(Banner中的id关联BannerItem中的banner_id)
嵌套模型(Banner关联的BannerItem中的img_id关联着img模型中的id)
隐藏banner数据中的字段
$data = $banner->toArry();unset($data['update_time']);
hiddle(对$banner中的$data数据进行操作)
$data = $banner->hidden(['update_time']);
visible(只显示$banner中data里选中的数据)
(推荐)在模型类里隐藏数据
model/Banner.php、BannerItem.php、Img.php在class Banner extends Model中{ protected $hidden = ['id'];}
模块的关联
http://blog.csdn.net/github_37512301/article/details/75675054
一对一
主表不包含外键,从表包含外键,若在从表关联主表使用belongTo,主表关联从表使用hasMany
return $this->HasOne('关联的模型','关联模型的外键','当前模型的主键')
return $this->belongsTo('关联的模型','当前模型的外键','关联模型的主键')
一对多
return $this->hasMany('关联的模型','关联模型的外键','当前模型的主键')
多对多
return $this->belongsToMany('关联的模型','中间表名','中间表名与关联模型相关的的外键名','中间表名与当前模型相关的外键名')
页面建设
轮播图页面接口(app\\api)
url
jecht.com/api/v1/banner/?XDEBUG_SESSION_START=11508
Banner控制器
1.对ID通过IDMustBePositiveInt()模块进行验证 2.根据GetBannerByID获取Banner对象3.通过错误检测层对Banner对象的报错进行判断和显示4.返回banner到客户端(api\\controller\\v1\\Banner.php)获取数据库中Banner中对应的banneritem表和对应的img数据
Banner模块及其关联模块
基础model模型(model\\BaseModel.php)
获得id参数(model\\Banner.php)
获得Banner_id参数,并关联到BannerModel中的id参数 model\\BannerItem.php
将Img中的id与item中的img_id关联model\\Img.php
validate字符验证
基础的字符验证模型validate\\BaseValidate.php
验证传入的id参数是否为正整数IDMustBePostivenInt.php
全局异常处理层
全局异常处理执行中心lib\\exception\\ExceptionHandler.php
基础异常处理模板lib\\exception\\BaseException.php
public $code = 400;public $msg = 'invalid parameters';public $errorCode = 999;
通用参数错误lib\\exception\\ParameterException.php
public $code = 400;public $errorCode = 10000;public $msg = \"invalid parameters\";
Banner丢失异常处理lib\\exception\\BannerMissException.php
public $code = 404;public $msg = '请求的Banner不存在';public $errCode = 40000;
三大主题及主题头部图片接口
Theme主题控制器
获取数据库中theme表,以及topic_img的url和head_img的urlapi\\controller\\v1\\Theme.php
Theme及其关联模块
使用关联模型,将theme数据表的topic_img_id字段和head_img_id字段关联到img表的id字段 model\\Theme.php
获得topic_id和head_img_id,并关联到img表中的idmodel\\Product.php
验证传入的id必须是以逗号分割的正整数validate\\IDCollection.php
主题异常处理\\lib\\exception\\ThemeException.php
public $code = 404;public $msg = '指定的主题不存在,请检查ID';public $errCode = 30000;
分类商品接口
所有分类产品内容
jecht.com/api/v1/category/all
category分类控制器
获得头部图片controller\\v1\\Category.php
category关联模块
关联Img模块处理图片model\\Category.php
category字符验证
category异常处理
lib\\exception\\CategoryException.php
public $code = 404;public $msg = \"指定类目不存在,请检查参数\";public $errCode = 50000;
产品接口
最近新品
jecht.com/api/v1/category/recent?count=15
分类产品及头图
jecht.com/api/v1/category/by_product?id=7
product分类控制器
实现两个功能的函数controller\\v1\\category
product关联模块
两个功能函数的数据库查询操作model\\Category.php
product字符验证
验证传入的count在1到15之间,默认不填为15validata\\Count.php
验证id在分类大类的id之间,且为正整数validata\\IDMustBePositiveInt.php
product异常处理
ProductException.php
public $code = 404;public $msg = '产品不存在';public $errCode = 20000;
CategoryproductException.php
public $code = 404;public $msg = \"指定的分类产品不存在,请检查ID\";public $errCode = 50001;
下单接口的访问权限控制
权限校验模型
验证是否合法
验证是否有效
验证token所对应的权限
验证过程:验证身份的时候依靠小程序的身份体系传递的code码传向gettoken接口;gettoken接收到code码后,传递给微信服务器,微信服务器返回两个参数:openid、session_key;openid就是用户身份id,gettoken接收id后生成token令牌,存储openid到数据库;
0 条评论
回复 删除
下一页