LARAVEL 项目开发规范

前言

为了更好地发挥 Laravel 的优势,本规范将充分利用 Laravel 的特性为前提,遵循并模仿 Laravel 的框架规范为准则。

配置文件

配置内容属于架构信息、服务器信息、有必要隐藏且无法提交 git 的信息,请使用 .env 文件配合 env() 方法在 /config 文件夹中相应配置文件中进行设定(.env.example 中必须添加对应的字段和示例),属于业务逻辑的常量配置,或可以提交到 git 而无需隐藏的部分配置类信息,直接在定义 /config 相应配置文件中。

数据先行

迁移文件是 Laravel 的一大亮点,迁移文件使得数据的维护更加有效率。在项目开发之前,数据库的设计至关重要。所以项目进行的第一步就是设计数据库。追加 App/Models 目录,App/User.php 迁移至 App/Models 目录中。

在这个阶段,应有如下的产出:

基础接口

Repository 代码完成的基础之上,可以把基于 Resource 的基础接口完成,包括数据的验证,异常处理,数据格式化。其中各个模块的实现应该分离解耦。接口的风格遵循 RESTful。在这个阶段应该有如下的产出:

第三方服务

在项目的开发中往往会使用第三方的服务来完成一些功能,比如邮件、短信、存储等。这方面可以与上述的阶段同时进行。这阶段应该有如下的产出:

扩展接口

在上述的三个阶段完成之后,整个项目的基础工作已经完成。那么在这阶段就需要设计出具体的业务逻辑接口。而接下来的工作只需要集中于逻辑代码的实现。这阶段应该有如下的产出:

PHP 编码规范

标签

编码

PHP文件必须使用无BOM的UTF-8编码方式

注释

单行注释,在语句后面使用 // 注释,注意斜杆后面跟一个空格。多行注释,如下示例:

文件注释:

/**
 * 描述
 *
 * @copyright Copyright 2017, 公司名称
 * @author    SUNGMEE
 * @Date:     2017/07/01
 * @Time:     18:00:00
 */

方法或者函数注释:

/**
 * 描述
 *
 * @date   2017/05/28 11:27:17
 * @param  类型 $fields 描述
 * @param  类型 $fields 描述
 * @return 类型 描述
 */

属性注释:

/**
 * 描述
 *
 * @var 类型
 */

命名规范

变量命名

变量命名使用小驼峰(例如:$firstName)或者中间下划线命名(例如:$first_name),一个页面选择一种,不可杂糅。不用缩写,用 name, address, salary 等代替 nam, addr, sal;全局变量以 g_ 开头。和前端交互的变量名全部用小写加下划线命名。

常量命名

全部使用大写字母和下划线组成,常量的名称中不允许出现小写字母。不能模仿系统的常量命名方式(例如:define("__TOO__", "something"),可能造成与系统常量的冲突).

类命名

类名和文件名必须保持一致,并且一个文件只有一个类,命名采用大驼峰,例如:FirstClass。另外,每个类需要有命名空间 namespace,且采用 PSR-4 规范组织和整理文件和命名空间。

属性和方法命名

代码格式

安全规范

数据库规范 遵循 Laravel 规范

前后端通讯

为最大发挥 Laravel 的特性,前后端通讯数据格式通常采用 JSON 或 集合(对象),一般不用纯 PHP 数组。Laravel 集合参考文档

JSON 范例

在控制器中,须省略 response()->json()Larave 会根据需要自动进行 JSON 转换处理,直接返回如下格式的数组即可。

return [
    'status'        => 'success',
    'status_code'   => 200,
    'data'          => $collection
]);

return [
    'status'        => 'failed',
    'status_code'   => 400,
    'message'       => $message
];

PS:状态码的使用,请阅读文档

集合(对象)范例

$data['title']      = 'Title';
$data['subtitle']   = 'Sub Title';
$data['tables']     = $collection;
...

return view('view', $data);

团队协作

团队协作,多多沟通,尽量减少重复劳动和无用功。