美文网首页
Laravel 复杂项目开发规范

Laravel 复杂项目开发规范

作者: fourn熊能 | 来源:发表于2020-01-10 16:32 被阅读0次

    项目规范

    扩展包

    严禁在项目中新增任何生产环境扩展包

    所需要用到的扩展在项目规划初期就已经包含,如果真没有,请沟通解决

    如果需要引入用于测试的扩展,请加上 --dev 参数

    composer require laracasts/generators --dev
    

    测试用的服务提供者,清手动注册,并加上环境判断:

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

    配置信息与环境变量

    牢记以下几条:
    1、环境相关配置一律放到 .env 文件中,其他地方不准放,记得同步到 .env.example
    2、只允许在配置文件中读取 .env 文件,其余地方严禁使用 env()
    3、所有程序配置放到配置目录中,并一律使用 config() 获取
    4、数据库配置读取,一律使用 db_config() 获取
    5、不要在配置文件里面写闭包

    重要:不要在配置文件以外的任何地方使用 env(),所有环境变量在配置文件中都有,用 config() 来取。否则会影响上线之后的配置缓存。

    辅助函数

    严禁编写任何辅助函数,你没有任何情况会用到它们。

    业务相关的放到 Services 层,数据相关的放到 Repository 层,哪怕是工具也封装到 Class 里面去,参考 Laravel6.* 中的 Arr 和 Str 工具类。

    工具统一

    请使用 PHPStorm,把代码提示(ide-helper)和框架插件(laravel)装上。

    请把键位都调整为 sublime-text(macOs),不然结队编程的时候别扭。

    请把键盘的 command 键位放到空格键的左边第一个,不然别人来你电脑上操作贼别扭。

    其他随意。

    编码规范

    路由

    牢记以下几点:
    1、严禁在路由文件中写任何闭包
    2、Restful 规则记不住的,路由命名不规范的,发现了就后果很严重
    3、严禁使用 resource 定义路由,宁愿多打两行,否则容易出现空路由,且不好写注释
    4、路由命名必须写,路由注释必须写

    路由模型绑定

    能用的地方必须用,字段有差异的去 app/Providers/RouteServiceProvider.php 的 boot 里面自定义。

        public function boot()
        {
            Route::bind('user_name', function ($value) {
                return User::where('name', $value)->first();
            });
    
            Route::bind('photo', function ($value) {
                return Photo::find($value);
            });
    
            parent::boot();
        }
    

    模型 Model

    命名规范

    • 数据模型类名 必须 为「单数」, 如: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 来扩展数据模型

    模型本身只允许存放框架本身提供的方法及属性,例如:
    1、允许填充字段等属性
    2、模型关联的所有方法
    3、访问器、修改器、转换器
    4、定义查询范围
    ...

    超出的范围的方法,如果涉及到业务往 Services 层放,把模型注入到 Service 来操作。不涉及业务的往 Trait 或者 Repository 层放,这取决于实际情况。

    关于 SQL 文件

    不要直接操作数据,不要直接导出 SQL,不要直接模拟数据

    控制器

    前台控制器命名使用复数形式,后台控制器命名使用单数形式。例如:

    前台:PhotosController、UserPhotosController
    后台:PhotoController、UserPhotoController

    这方方便快速定位文件。

    牢记以下几点:

    • 方法命名要有可读性,哪怕长一点
    • 方法内部请认真写注释,写清楚原因、作用
    • 控制器中不要写「私有方法」,里面只应该存在「路由动作方法」,和路由一一对应
    • 没有的方法就注释整体掉,注明是为什么注释的

    特别注意:严禁多个路由对到同一个控制器方法,同样的,严禁多个转换层对到同一个控制器方法

    用户认证

    用户认证请放到控制器层,例如:

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

    Restful 真不适合把用户认证放在路由中,这样会把同一个资源的路由写的很散。将来应用的发展趋势也一定是减少需要登录才能访问的功能。

    表单验证

    简单的查询逻辑不用写验证,手动考虑条件为空的情况。其他所有情况必须使用「表单请求验证类」。

    验证类可以使用以下方式缩减代码量:

    public function rules()
    {
        switch($this->method())
        ...
    

    授权策略

    必须使用授权策略来做用户授权。发现越权操作数据的情况,后果很严重。在控制器中尽量用 authorize 方法做判断,当然你也可以用$user->can()。

    测试

    程序员必须自己做线上测试,然后才到业务测试,有些细节只有程序员自己知道。

    相关文章

      网友评论

          本文标题:Laravel 复杂项目开发规范

          本文链接:https://www.haomeiwen.com/subject/ivopactx.html