微信小程序商城构建全栈应用(有源码)---转载

这里写图片描述

环境:

  • TP 5.07
    • 应用项目
    • 核心框架
    • 下载
      • Composer
      • git
      • 直接下载
  • PHP 5.6
  • PostMan(Fd)
  • phpstorm(减少鼠标使用率)
    • 快速切换文件 alt + 左右
    • ctrl + shift + n 查找文件
    • 查找使用过文件(recent files) alt + r
    • ctrl + shift + f(查找)/r
    • alt + 1 快速选中代码块
    • 焦点位于文件目录,alt + insert
    • 主题切换 ctrl + ~
    • F12 类文件跳转
    • ctrl + alt + o 删除无用空间
    • 插件
      • Key promoter
      • AceJump模式后(默认是Ctrl+J),再按任一个字符,插件就会在屏幕中这个字符的所有出现位置都打上标签,你只要再按一下标签的字符,就能把光标移到该位置上。
  • 单元测试(业务代码过长)
  • Extend Selection ,默认快捷键是Ctrl+W。

这里写图片描述

XDEBUG(一定要注意配置内容)

不过还是没有一个静态ide key

zend_extension = F:\phpStudy\php\php-7.0.12-nts\ext\php_xdebug-2.5.4-7.0-vc14-nts.dll

[xdebug] 
xdebug.remote_enable = off 
xdebug.profiler_enable = off 
xdebug.profiler_enable_trigger = off 
xdebug.profiler_output_name = cachegrind.out.%t.%p 
xdebug.profiler_output_dir = "F:/phpStudy/php/tmp" 
xdebug.show_local_vars=0 
xdebug.idekey=PHPStorm 
xdebug.remote_enable = On 
xdebug.remote_host=localhost 
xdebug.remote_port=9001 
xdebug.remote_handler=dbgp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

这里写图片描述

PATH_INFO URL

这里写图片描述

多模块与模块命名空间

app\ 是 TP5应用程序,也就是根的命名空间

自动创建命名空间

这里写图片描述

配置虚拟域名简化URL路径

外部Url

public注意隐私性
-
- 虚拟域名
- Apache服务器重写

路由模式

  • route.php配置
  • 动态注册
Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)')
  • 1
  • 请求类型
    • GET
    • POST
    • DELETE
    • PUT
    • *

获取请求参数(3种)

Route::get('hello/:id','simple/Test/hello');
然后在方法中接受参数
 ?name=wangchunlong
  • 1
  • 2
  • 3

通过Request(不区分HTTP请求类型)
这里写图片描述

$all = Request::instance()->param();
$all = Request::instance()->get();
$all = Request::instance()->route(); 路径中的参数
var_dump($all)
  • 1
  • 2
  • 3
  • 4

助手函数

获取所有参数
input('param.')
  • 1
  • 2
依赖注入

这里写图片描述

业务需求

这里写图片描述

搭建架构(重要)

独立验证

这里写图片描述

批量验证batch() 
  • 1

验证器(封装性更好)

这里写图片描述
这里写图片描述

程序架构

这里写图片描述

REST

英文:Representational State Transfer,又称具象(表述性)状态传输
一种风格,约束,设计理念
基于资源
https://www.zhihu.com/question/27785028 (回答的很详细)
REST模式与复杂的SOAP和XML-RPC相比更加简洁

这里写图片描述

SOAP

SOAP(Simple Object Access Protocol,即简单对象访问协议)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构信息。SOAP为了简化网页服务器(Web Server)从XML数据库中提取数据时,节省去格式化页面时间,以及不同应用程序之间按照HTTP通信协议,遵从XML格式执行资料互换,使其抽象于语言实现、平台和硬件。

RESTFul API

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
使用 RPC 样式架构构建的基于 SOAP 的 Web 服务成为实现 SOA 最常用的方法。RPC 样式的 Web 服务客户端将一个装满数据的信封(包括方法和参数信息)通过 HTTP 发送到服务器。服务器打开信封并使用传入参数执行指定的方法。方法的结果打包到一个信封并作为响应发回客户端。客户端收到响应并打开信封。每个对象都有自己独特的方法以及仅公开一个 URI 的 RPC 样式 Web 服务,URI 表示单个端点。它忽略 HTTP 的大部分特性且仅支持 POST 方法。

  • 通常使用JSON描述数据
  • 无状态
  • 这里写图片描述
URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。
  • HTTP动词(幕等性,资源安全性)
    • POST:创建
    • PUT: 更新
    • GET:查询
    • DELETE:删除

这里写图片描述

这里写图片描述

  • 200 GET查询成功
  • 201 POST创建成功(有可能包涵PUT)
  • 202 PUT更新成功(请求发送,但是服务器还没有处理)
  • 404 资源没找到
  • 400 参数错误
  • 401 未授权
  • 403 资源禁止
  • 500 服务器未知错误(服务器原因,未知Bug)

这里写图片描述

这里写图片描述

模仿
  • 外部开发
  • 豆瓣API
  • GitHub开发者API
  • 切勿盲目照搬标准REST

全局异常处理(AOP)

在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

Exception流程

这里写图片描述

这里写图片描述

固有的处理异常的思维模式与流程

这里写图片描述
这里写图片描述

  • 记录日志状态不要去配置文件config里面去写变量,一般是读取Config::get().
  • 如果要记录变量(数据状态),可以使用数据库或者是Redis,TP5自带缓存,全部变量
  • 调试方法:类名追踪,查看继承关系,F12
  • HTTPException和Exception不是继承关系

数据库与ORM

  • ORM
    • 简化代码编写
    • 可以跨数据库
  • 模型和数据访问层是两个不同的概念,模型处理业务,Db查询数据库,模型建立于Db
  • 不要因为模型性能差(慢),放弃模型
    • 高级语言都有性能损耗,框架也有,为什么使用框架?开发周期,效率
  • 使用面向对象设计模型
  • 模型底层还是数据访问层,自动,强化

原生sql语句

       $result = Db::query('select * from banner_item where banner_id=?',[$id]);
        return $result;
  • 1
  • 2

构造器操作数据库

这里写图片描述

  • Db数据库操作入口对象(连接,增删改查…)
    • 工厂模式(根据配置文件来选择不同驱动Drivers,进而区分不同数据库)
    • 实例化Collection对象(PDO)
    • 惰性连接,使用时才链接
  • 查询Query(隐藏差异性,差异没有解决,也就是面向对象的封装性)
    • 对CURD的一种封装(创建、更新、读取和删除)
    • 链式操作
    • Builder(四种不同类型)把query封装语句翻译成原生sql语句,返回给collection,执行
      • 适配不同类型的数据库
  • Drivers(thinkphp-db-connector)
  • -
        $result = Db::table('banner_item')->where('banner_id','=',$id)->find(); 返回一维数组,一条数据里面所有的属性
        $result = Db::table('banner_item')->where('banner_id','=',$id)->select(); 返回二维数组
  • 1
  • 2
        闭包
        $result = Db::table('banner_item')
            ->where(function($query) ues ($id){
                $query->where('banner_id','=',$id)
                })->select();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • table和where操作返回的只是query对象,辅助方法,链式方法。
  • find,select,update,delete,insert才会执行sql语句
  • 非链式调用方法直到执行sql语句才会自动回收,清除状态
  • where(字段名,表达式(不区分大小写,默认值=),查询条件),where写法:表达式,数组法(不灵活,略),闭包
  • fetchSql() 返回sql语句,也就是查询构造器最终生成的sql代码
  • 开启sql日志,确定打开debug和sqldebug,然后在log级别中添加sql字符串。前提是type:file,全局

使用模型和关联模型操作数据库ORM(object relation mapping对象关系映射,一个表就是一个对象)

表与表不再是外键的关系,而是对象与对象之间的作用关系
模型:数据查询,业务逻辑……..(一个业务,根据功能划分,不只有一个对象,有可能多个对象)
模型(模型层)不只有一层,可以划分多层,还有model,service,
Db(数据访问层)的劣势就是不能很好的处理业务逻辑
Db是模型的基石

关联模型->重表

继承Model
数据库表名和模型名(文件名)一一对应
如果要自定义的话,需要添加 protected $table = '表名';
  • 1
  • 2
  • 3
自动生成banner模型
php think make:model 应用名api/模块名
  • 1
  • 2
静态调用(推荐)调用简洁,模型本质
$banner = BannerModel::get($id); 
实例对象调用
$banner = new BannerModel(); 具体数据记录
$banner = $banner->get($id);
  • 1
  • 2
  • 3
  • 4
  • 5
  • get 返回一个模型对象,model特有
  • find 返回一个模型对象,Db
  • all 一组,model特有
  • select 一组,Db

开闭原则(对修改关闭、对扩展开发)

数据冗余(数量不可控查询,多次使用,减少嵌套查询,减少服务器压力)

  • 缺点
    • 写入时需要多次写入
    • 更新也要同时修改(数据不一致)

接口粒度与接口分层

  • 架构
    • 分层(底层粒度小->高层粒度大)
    • 基础层-业务层-页面层
  • 粒度过大,复用性不好
  • 粒度过小,客户端调用不方便,调用过多HTTP请求
    • 请求异步?数据合并

Token令牌

  • 合法性
  • 有效性
  • 有权限
  • openid 用户身份的唯一标识,功能,一定
  • code 数字码
  • session_key 拿到并且解密信息

这里写图片描述

这里写图片描述
这里写图片描述

如果直接Post传递,令牌A传递B用户Body信息,令牌A可以修改B的信息。
hasOne,belongsTo区分 一对一,使用表Model如果包含连接外键,使用belongsTo

下单与支付(最复杂)

这里写图片描述

客户端Token验证

这里写图片描述

项目源码

https://github.com/Paladinhanxiao/Tp5WechatShop

本文转载自:https://blog.csdn.net/qq_33936481/article/details/75267295

没有更多推荐了,返回首页