Laravel框架开发规范

扩展包

我们都知道 Laravel 扩展包的注册会对应用造成消耗。有一些扩展包是开发环境中专用,生产环境中并不会使用到,为了避免无用的负载, 必须严格控制其安装和加载。安装开发专用扩展包时必须使用 --dev 参数,如:
composer require laracasts/generators --dev
开发专用的 provider 绝不在 config/app.php 里面注册,必须在 app/Providers/AppServiceProvider.php
文件中使用如以下方式:


public function register()
{
   	 if ($this->app->environment() == 'local') {
          	$this->app->register('Laracasts\Generators\GeneratorsServiceProvider');
        }
}

配置信息与环境变量

所有程序配置信息必须通过 config() 来读取,所有的 .env 配置信息必须通过config() 来读取,绝不在配置文件以外的范围使用 env()。

这样做主要有以下几个优势:

  1. 定义分明,config() 是配置信息,env() 只是用来区分不同环境;
  2. 统一放置于 config 中还可以利用框架的配置信息缓存功能来提高运行效率;
  3. 代码健壮性,config() 在 env() 之上多出来一个抽象层,会使代码更加健壮,更加灵活。

辅助函数

Laravel 提供了很多辅助函数,有时候我们也需要创建自己的辅助函数。
必须把所有的『自定义辅助函数』存放于 app 文件夹中,文件名为helpers.php

if(! function_exists('decrypt_aes'))
 {
	   // aes解密
	 function decrypt_aes($aes_data, $key)
	 {
			return json_decode(openssl_decrypt(hex2bin($aes_data), 'AES-256-ECB', $key, OPENSSL_RAW_DATA), true);
	 }
 }

并在 composer.json 文件中加载,方法请见: Laravel 的自定义函数 helpers.php 文件存放位置

代码风格

代码风格必须严格遵循 PSR-2 规范。

路由器

绝不在路由配置文件里书写『闭包路由』或者其他业务逻辑代码,因为一旦使用将无法使用路由缓存

路由器要保持干净整洁,绝不放置除路由配置以外的其他程序逻辑。

必须优先使用Restful 路由,配合资源控制器使用。资源路由路由URI 必须使用复数形式。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NYwEzYwM-1597387500667)(http://wiki.hibo.vip.php?s=/api/attachment/visitFile/sign/1761b8841c5d2b49f0f5a79b175317b1&showdoc=.jpg)]
出 Restful 路由的,应该模仿上图的方式来定义路由。使用 resource 方法时,如果仅使用到部分路由,必须使用 only 列出所有可用路由:

Route::resource('photos', 'PhotosController', ['only' => ['index', 'show']]);

绝不 使用 except,因为** only** 相当于白名单,相对于 except 更加直观。路由使用白名单有利于养成『安全习惯』。

除了** resource** 资源路由以外,其他所有路由都 必须 使用 name 方法进行命名。

必须使用『资源前缀』作为命名规范,如下的 users.follow,资源前缀的值是 users.

Route::post('users/{id}/follow', 'UsersController@follow')->name('users.follow');

模型

所有的数据模型文件,都必须 存放在:app/Models/ 文件夹中。

数据模型相关的命名规范:

  • 数据模型类名必须为「单数」, 如:App\Models\Photo
  • 类文件名必须为「单数」,如:app/Models/Photo.php

有时候数据模型里的代码会变得很臃肿,应该利用 Trait 来精简逻辑代码量,提高可读性,类似于Ruby China 源码。

借鉴于 Rails 的设计理念:「Fat Models, Skinny Controllers」。
存放于文件夹:app/Models/Traits 文件夹中。

控制器

优先使用 Restful 资源控制器

控制器相关的命名规范:

类名必须为「复数」,如:PhotosController
类文件名必须为「复数」,如:PhotosController.php
必须保持控制器文件代码行数最小化,还有可读性。

不应该为「方法」书写注释,这要求方法取名要足够合理,不需要过多注释;
应该为一些复杂的逻辑代码块书写注释,主要介绍产品逻辑 - 为什么要这么做。;
不应该在控制器中书写「私有方法」,控制器里应该只存放「路由动作方法」;
绝不遗留「死方法」,就是没有用到的方法,控制器里的所有方法,都应该被使用到,否则应该删除;
绝不在控制器里批量注释掉代码,无用的逻辑代码就必须清除掉。

表单验证

必须使用表单请求 - FormRequest 类来处理控制器里的表单验证。
FormRequest 表验证类必须遵循资源路由方式进行命名,photos 对应app/Http/Requests/PhotoRequest.php
FormRequest 表验证类文件请参考以下:


<?php

namespace App\Http\Requests;

class PhotoRequest extends Request
{
    public  function  authorize()  
	{ 
	    // Using policy for Authorization  
	    return  true;  
	}
    public function rules()
    {
        switch($this->method())
        {
            // CREATE
            case 'POST':
            {
                return [
                    // CREATE ROLES
                ];
            }
            // UPDATE
            case 'PUT':
            case 'PATCH':
            {
                return [
                    // UPDATE ROLES
                ];
            }
            case 'GET':
            case 'DELETE':
            default:
            {
                return [];
            };
        }
    }

    public function messages()
    {
        return [
            // Validation messages
        ];
    }
}

Artisan命令行

所有的自定义命令,都必须有项目的命名空间,如:

php artisan doctor:clear-token

php artisan doctor:send-status-email

日期函数

必须使用 Carbon 来处理日期和时间相关的操作。

中间件

Auth 中间件必须书写在控制器的 __construct 方法中,并且必须使用except 黑名单进行过滤,这样当你新增控制器方法时,默认是安全的。

public function __construct()
{
    $this->middleware('auth', [            
        'except' => ['show', 'index']
    ]);
}

注意事项

关闭 DEBUG

Laravel Debug 开启时,会暴露很多能被黑客利用的服务器信息,所以生产环境下请必须确保:

APP_DEBUG=false

开发流程

路由 >>> 控制器 >>> 服务 Service >>> 响应 Response

1、状态码问题:所有的错误都走 Exception 自定义公用的状态码管理,例如 1001 数据验证错误 2001用户相关错误接口日志做好状态码记录

2、服务service只做逻辑处理,不进行数据封装格式化,所有的格式化返回数据交给控制器处理

3、数据验证:如果控制器方法较少,验证参数少的情况下,数据验证在控制器处理。资源控制器必须使用 表单请求 - FormRequest 类

4、公用方法放在app/helpers.php 文件里,composer 自动加载

5、公用服务放在 app/Tools 目录文件中,例如图片上传、短信发送、支付宝、微信支付

author: 汤小米
Datetime: 2020-8-14


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值