开发规范
辅助函数
https://laravel-china.org/docs/laravel/5.5/helpers
必须 把所有的『自定义辅助函数』存放于 bootstrap
文件夹中。
并在 bootstrap/app.php
文件的最顶部进行加载:
require __DIR__ . '/helpers.php';
数据模型相关的命名规范:
- 数据模型类名
必须
为「单数」, 如:App\Models\Photo
- 类文件名
必须
为「单数」,如:app/Models/Photo.php
- 数据库表名字
必须
为「复数」,多个单词情况下使用「Snake Case」 如:photos
,my_photos
- 数据库表迁移名字
必须
为「复数」,如:2014_08_08_234417_create_photos_table.php
- 数据填充文件名
必须
为「复数」,如:PhotosTableSeeder.php
- 数据库字段名
必须
为「Snake Case」,如:view_count
,is_vip
- 数据库表主键
必须
为「id」 - 数据库表外键
必须
为「resource_id」,如:user_id
,post_id
- 数据模型变量
必须
为「resource_id」,如:$user_id
,$post_id
利用 Trait 来扩展数据模型
有时候数据模型里的代码会变得很臃肿,应该 利用 Trait 来精简逻辑代码量,提高可读性,类似于 Ruby China 源码。
借鉴于 Rails 的设计理念:「Fat Models, Skinny Controllers」。
存放于文件夹:app/Models/Traits
文件夹中。
Repository
绝不 使用 Repository,因为我们不是在写 JAVA 代码,太多封装就成了「过度设计(Over Designed)」,极大降低了编码愉悦感,使用 MVC 够傻够简单。
代码的可读性,维护和开发的便捷性,直接关系到程序员开发时的愉悦感,直接影响到项目推进效率和程序 Debug 的速度。
关于 SQL 文件
- 绝不 使用命令行或者 PHPMyAdmin 直接创建索引或表。必须 使用 数据库迁移 去创建表结构,并提交版本控制器中;
- 绝不 为了共享对数据库更改就直接导出 SQL,所有修改都 必须 使用 数据库迁移 ,并提交版本控制器中;
- 绝不 直接向数据库手动写入伪造的测试数据。必须 使用 数据填充 来插入假数据,并提交版本控制器中。
Laravel 的 Model 全局作用域 允许我们为给定模型的所有查询添加默认的条件约束:https://laravel-china.org/docs/laravel/5.3/eloquent#global-scopes
必须 保持控制器文件代码行数最小化,还有可读性。
- 不应该 为「方法」书写注释,这要求方法取名要足够合理,不需要过多注释;
- 应该 为一些复杂的逻辑代码块书写注释,主要介绍产品逻辑 -
为什么要这么做。
; - 不应该 在控制器中书写「私有方法」,控制器里
应该
只存放「路由动作方法」; - 绝不 遗留「死方法」,就是没有用到的方法,控制器里的所有方法,都应该被使用到,否则应该删除;
- 绝不 在控制器里批量注释掉代码,无用的逻辑代码就必须清除掉。
保持目录清晰
- layouts - 页面布局文件 必须 放置于此目录下;
- common - 存放页面通用元素;
- pages - 简单的页面存放文件夹,如:about、contact 等;
- resources - 对应 Restful 路由的资源路径名称,以 URI
photos/create
为例,对应create.blade.php
文件,存放在文件夹photos
下。
必须 避免在 resources/views
目录下直接放置视图文件。
局部视图
局部视图文件 必须 使用 _
前缀来命名,如:photos/_upload_form.blade.php
photos/index.blade.php
- 内容列表视图
- 对应路由器
/photos
,命名photos.index
- 控制器方法
PhotosController@index
create_and_edit
视图
很多情况下,创建和编辑视图里的页面结构接近相似,在这种情况下,应该 使用 create_and_edit
视图。以 photos
为例:
PhotosController@create
- 对应视图:/photos/create_and_edit.blade.php
PhotosController@edit
- 对应 视图:/photos/create_and_edit.blade.php
用户授权我们会单独使用 Policy 授权策略 来实现。
使用基类
所有 FormRequest 表验证类 必须 继承 app/Http/Requests/Request.php
基类。
https://laravel-china.org/docs/laravel-specification/5.5/form-validation
验证类命名
FormRequest 表验证类 必须 遵循 资源路由 方式进行命名,photos
对应 app/Http/Requests/PhotoRequest.php
。
使用基类
所有 Policy 授权策略类 必须 继承 app/Policies/Policy.php
基类。
Policy 授权策略类 必须 遵循 资源路由 方式进行命名,photos
对应 /app/Policies/PhotoPolicy.php
。
https://laravel-china.org/docs/laravel-specification/5.5/policy
日期和时间
必须 使用 Carbon 来处理日期和时间相关的操作。
前端开发
- 必须 使用 Laravel 官方前端工具做前端开发自动化;
- 必须 保证页面只加载一个
.css
文件; - 必须 保证页面只加载一个
.js
文件; - 必须 为
.css
和.js
增加 版本控制; - 必须 使用 SASS 来书写 CSS 代码;
Auth 中间件
Auth 中间件 必须 书写在控制器的 __construct
方法中,并且 必须 使用 except
黑名单进行过滤,这样当你新增控制器方法时,默认是安全的。
关闭 DEBUG
XSS
必须 使用 Blade 模板引擎的 {{ $content }}
语法会对用户内容进行转义。
https://laravel-china.org/docs/laravel-specification/5.5/laravel-security-practices
SQL 注入
在使用 raw()
来编写复杂查询语句时,必须 使用数据绑定。
批量赋值
Laravel 提供白名单和黑名单过滤($fillable
和 $guarded
),开发者 应该 清楚认识批量赋值安全威胁的情况下合理灵活地运用。
配置信息缓存
生产环境中的 应该 使用『配置信息缓存』来加速 Laravel 配置信息的读取。
路由缓存
生产环境中的 应该 使用『路由缓存』来加速 Laravel 的路由注册。
数据库请求优化
临近上线时 必须 使用 Laravel Debugbar 或者 Clockwork 留意每一个页面的总 SQL 请求条数,进行数据库请求调优。
https://laravel-china.org/docs/laravel-specification/5.5/laravel-optimization
代码生成器:https://github.com/summerblue/generator
https://laravel-china.org/docs/laravel-specification/5.5/code-generator
文档资料
- 必须 熟记 Laravel 5.5 官方文档,查阅时能快速定位,5 遍以上;
- 必须 熟记 Laravel 5.5 API 文档 的类结构,查阅时能快速定位;
- 必须 熟记所有 PSR 通过的标准;
- PSR 目前还未通过的标准,也要 应该 知晓 http://www.php-fig.org/psr/#draft
- 应该 熟悉 PHP 最佳实践
- 应该 了解 『Rails 信条』