项目
开发文件不需要自动加载
- 项目中使用 IDE Helper 生成浏览器提示文件, 此文件在正式项目下不需要进行加载
- Clockwork 不需要加载
"extra" : {
"laravel" : {
"dont-discover" : [
"itsgoingd/clockwork",
"barryvdh/laravel-ide-helper",
]
}
},项目说明
项目目录树
├── config # 配置文件
├── modules # 模块名称, 这里以system 模块 作为说明, 详细见 模块目录树
│ ├── finance
│ ├── order
│ └── ...
├── public
│ ├── docs # 文档
│ ├── modules # 模块资源
│ └── resources # 资源项目 / 公共
│ ├── css
│ ├── js
│ └── scss
├── resources # 资源源文件
│ ├── assets
│ ├── docs
│ ├── lang
│ ├── en
│ └── zh
├── storage # 存储目录
│ ├── app # 应用资源
│ ├── bootstrap # 启动项目
│ ├── bower # bower 文档
│ ├── clockwork # 调试文件
│ ├── console # 控制器
│ ├── framework # 框架缓存
│ │ ├── cache
│ │ ├── sessions
│ │ └── views
│ ├── logs # 日志
│ ├── phplint
│ ├── purifier
│ ├── sami
├── tests # 测试目录
│ ├── MerchantApi
│ │ └── User
│ └── WebApi
│ └── User
└── vendor # 第三方文档(只是预览, 不做详细说明)代码风格统一
- 下载代码风格文件Code_Style-Mark
- 打开
Preferences | Editor | Code Style, 在右侧设置中选择Import Scheme, 导入刚才下载的 xml 文件 - 在
Scheme选择框中选择刚才导入的风格进行使用
phpstorm 常用快捷键
ctrl/cmd + alt + L # 格式化代码(提交代码前操作)
ctrl/cmd + alt + O # 项目优化导入, 保证代码无冗余
ctrl/cmd + shift + n # 查找文件
ctrl/cmd + alt + shift + n # 查找函数代码协同
协同工具 GIT
代码使用 Git 进行代码协同
开发工作流程 Git Flow
git-flow 并不是要替代 Git,它仅仅是非常聪明有效地把标准的 Git 命令用脚本组合了起来。 Release 管理是版本控制处理中的另外一个非常重要的话题, 详细见下边的文档. Git Flow 的详细说明文档 git-flow 的工作流程
分支说明 master 只能用来包括产品代码。你不能直接工作在这个 master 分支上,而是在其他指定的,独立的特性分支中(这方面我们会马上谈到)。不直接提交改动到 master 分支上也是很多工作流程的一个共同的规则。 develop 是你进行任何新的开发的基础分支。当你开始一个新的功能分支时,它将是 开发 的基础。另外,该分支也汇集所有已经完成的功能,并等待被整合到 master 分支中。 这两个分支被称作为 长期分支。它们会存活在项目的整个生命周期中。而其他的分支,例如针对功能的分支,针对发行的分支,仅仅只是临时存在的。它们是根据需要来创建的,当它们完成了自己的任务之后就会被删除掉。
# 分支说明
master : 线上分支
develop : 开发分支
hotfix/2.0.3 : Bug 分支
feature/2.3 : 开发分支安装
安装 Git flow (参考文档: https://github.com/nvie/gitflow/wiki/Installation)
# 初始化
git flow init -d
# 查看帮助
git flow feature help
# 分支说明
Feature branches? [feature/]
Bugfix branches? [bugfix/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
# hotfix
# 创建修复分支
git flow hotfix start {missing-link}
#创建修复分支:
git flow hotfix finish {missing-link}
# feature
# 用于新版本开发时使用
git flow feature start 2.0.99
# 这个 “feature finish” 命令会把我们的工作整合到主 “develop” 分支中去,后需要手动推送到线上分支
git flow feature finish 2.0.99
# release
git flow release start 2.0.99
git flow release finish 2.0.99注意事项
- 开发新功能或者修复的时候,需要先保证本地没有未上传的代码才可以创建
- 提交分支时,需先提交到本地之后,运行 git flow… 后,推送到线上 master 和 develop(两次推送)
- 进行 hotfix 进行修复以及 release 发布版本时候必须完整填写
~/modules/build.md发版文件
代码提交规范
代码提交根据前缀来区分不同的提交内容
# 任务前缀
task # 859 子 订单列表界面调整/订单列表
# bug 前缀
bug # 308 用户管理操作
# 版本发布前缀
release # 2.3.2代码审核
代码要求
- 参数命名符合规范
- 撰写负责模块的注释(注释包含类, 接口文档, 参数, 方法, 函数)
- 撰写单元测试, 保障功能/接口 正常使用
审核标准
- 运行优化导入, 保证代码无冗余
ctrl + alt + o - 保证代码格式正确, 对文件夹进行代码格式化
ctrl + alt + l, 在src目录下运行 - 代码中不得存在编辑器提示的错误, 优化提示见PHP Code Review
- 对开发功能进行抽检, 进行考评, 不符合标准的进行 5 元红包进行改正
IDE
忽略掉不需要的加载目录
生成的文件, 不需要进行索引
# 前端文件
public/assets
# 调试
storage/clockwork
# 生成的文档
storage/sami
public/docs将 public 目录设置为资源根目录
因为 public 目录是对外输出目录, 所有的资源均以这个作为资源的识别
Code Review
1. 框架需要遵循的规范
# 使用 php-cs-fixer 来检测基本的格式
php artisan poppy:doc cs
# 使用 system:inspect 检测函数注释
php artisan system:inspect2. Request 输入
使用 Request, 这里的 Request 代表的是全局变量
控制器中不建议使用参数注入, 使用 input 替代即可.
同理的还有 Request::get('param')
// deprecated
$is_apply = \Input::input('is_apply');
// succcess
$is_apply = input('is_apply');3. 缓存命名
缓存使用 标签 + 命名 的方式来命名, 便于对数据进行分组, 例如 system 模块的 setting 配置项目的缓存应该如下使用.
这里 标签 的作用适用于区分模块, 命名 的作用是为了即使不支持缓存标签(例如文件缓存)的驱动下运行, 也能够保证系统可以正常运行.
例如:
这里的 system 代表 system 模块
这里的 system.setting 代表命名
// 设置缓存
$this->getCache('system')->forever('system.setting', static::$cache);
// 读取缓存
$this->getCache('system')->get('system.setting')如此这般, 模块缓存的清除便可以像如下清除;
$this->getCache('system')->clear()4. 去除多余参数
# bad, 默认为空字符串, 所以第三个参数是空字符串的时候不需要写
$type = sys_get($input, 'socialite_type', ''),
# good
$type = sys_get($input, 'socialite_type'),5. 保障模块洁净注释完整
system 模块不能包含其他模块的任何东西
生成 php 文档, 检查文档是否注释完整
6. 保障模块附加组件完整
模块需要安装的时候需要保证组件正常, 在 dependency 中添加的模块完整, 这个放置在 dependency 中进行验证
7. 其他注意事项
- 保证测试脚本可以正常执行
- Inspect 文件没有异常
- 保证接口正常, 使用接口检测 500 工具来运行, 保证接口正常
- 保证代码中不包含 debug 项目
- 不建议在项目中包含 env 的调用, 可以使用函数来进行调用
8. 框架升级 2.0 时候出现的问题
- No hint path defined for [poppy].
- Authentication user provider [pam.web] is not defined.
这里出现的问题是
- 清空缓存
- 删除框架文件
storage/framework/*.php - 删除 poppy 模块缓存文件
storage/app/poppy.json
9. Function name must be a string
这里一般的问题就是中间件名称和定义的中间件名称不匹配导致
