环境:
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(//代码效果参考:http://www.jhylw.com.cn/183527311.html
'param.')1
2
依赖注入
业务需求
搭建架构(重要)
独立验证
批量验证batch()
1
验证器(封装性更好)
程序架构
REST
英文:Representational State Transfer,又称具象(表述性)状态传输
一种风格,约束,设计理念
基于资源
(回答的很详细)
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创建成功(有可能包//代码效果参考:http://www.jhylw.com.cn/033336127.html
涵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')-