您现在的位置是:网站首页 > 心得笔记

laravel开发规范总结

盛悦2019-08-06594人围观
简介关于laravel开发规范总结,官网上都有详细的说明,本人属于那种勤能补拙的小拙,所以在这里总结几点,以备后期开发参考......

1、对于一些常用的常量定义

存储在  .env 和 config/app.php 文件中,然后使用 config() 函数来读取。- ✅ 最佳实践


这种方法既支持环境变量,又具备极高的灵活性,假如遇到同样的 CDN 多域名随机问题,你只需要写一个辅助方法,然后在 config/app.php 中调用即可,不需要动到任何一行业务逻辑代码。


代码示例

.env 文件中设置:

CDN_DOMAIN=cdndomain.com

config/app.php 文件中设置:

'cdn_domain' => env('CDN_DOMAIN', null),

程序中两种获取 相同配置 的方法:

  1. env('CDN_DOMAIN')

  2. config('app.cdn_domain')

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


2、辅助函数的定义

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

1、创建文件 app/helpers.php

<?php// 示例函数function foo() {
    return "foo";}

2、修改项目 composer.json

在项目 composer.json 中 autoload 部分里的 files 字段加入该文件即可:
{
    ...

    "autoload": {
        "files": [
            "app/helpers.php"
        ]
    }
    ...}

3、然后运行:

$ composer dump-autoload

OK,然后你就可以在任何地方用到 app/helpers.php 中的函数了。


3、路由定义

必须 优先使用 Restful 路由,配合资源控制器使用,见 文档

5(1).png

超出 Restful 路由的,应该 模仿上图的方式来定义路由。


3.1、resource 方法正确使用

一般资源路由定义:

Route::resource('photos', 'PhotosController');

等于以下路由定义:

Route::get('/photos', 'PhotosController@index')->name('photos.index');Route::get('/photos/create', 'PhotosController@create')->name('photos.create');Route::post('/photos', 'PhotosController@store')->name('photos.store');Route::get('/photos/{photo}', 'PhotosController@show')->name('photos.show');Route::get('/photos/{photo}/edit', 'PhotosController@edit')->name('photos.edit');Route::put('/photos/{photo}', 'PhotosController@update')->name('photos.update');Route::delete('/photos/{photo}', 'PhotosController@destroy')->name('photos.destroy');

使用 resource 方法时,如果仅使用到部分路由,必须 使用 only 列出所有可用路由:

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

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


3.2、资源路由单复数形式

资源路由路由 URI 必须 使用复数形式,如:

  • /photos/create

  • /photos/{photo}


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

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


4、模型定义

4.1、放置位置

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

命名空间:

namespace App\Models;

4.2、使用基类

所有的 Eloquent 数据模型必须 继承统一的基类 App/Models/Model,此基类存放位置为 /app/Models/Model.php


4.3、命名规范

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

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


5、控制器定义

5.1、单数 or 复数?

必须 使用资源的复数形式,如:

  • 类名:PhotosController

  • 文件名:PhotosController.php


5.2、保持短小精炼

必须 保持控制器文件代码行数最小化,还有可读性。

  • 不应该 为「方法」书写注释,这要求方法取名要足够合理,不需要过多注释;

  • 应该 为一些复杂的逻辑代码块书写注释,主要介绍产品逻辑 - 为什么要这么做。

  • 不应该 在控制器中书写「私有方法」,控制器里 应该 只存放「路由动作方法」;

  • 绝不 遗留「死方法」,就是没有用到的方法,控制器里的所有方法,都应该被使用到,否则应该删除;

  • 绝不 在控制器里批量注释掉代码,无用的逻辑代码就必须清除掉。


6、视图定义

6.1、保持目录清晰

  • layouts - 页面布局文件 必须 放置于此目录下;

  • common - 存放页面通用元素;

  • pages - 简单的页面存放文件夹,如:about、contact 等;

  • resources - 对应 Restful 路由的资源路径名称,以 URI photos/create 为例,对应 create.blade.php 文件,存放在文件夹 photos 下。

必须 避免在 resources/views 目录下直接放置视图文件。

6.2、局部视图

局部视图文件 必须 使用 _ 前缀来命名,如:photos/_upload_form.blade.php

6.3、视图命名要释义

为了和 Restful 路由器和资源控制器保持一致,视图命名也 必须 使用资源视图的命名方式。以 photos 为例:

  • photos/index.blade.php

    • 内容列表视图

    • 对应路由器 /photos,命名 photos.index

    • 控制器方法 PhotosController@index

  • photos/show.blade.php

    • 单个内容视图

    • 对应路由器 /photos/{id},命名 photos.show

    • 控制器方法 PhotosController@show

  • photos/create.blade.php

    • 内容创建视图

    • 对应路由器 /photos/create,命名 photos.create

    • 控制器方法 PhotosController@create

  • photos/edit.blade.php

    • 内容编辑的视图

    • 对应路由器 /photos/edit,命名 photos.edit

    • 控制器方法 PhotosController@edit

create_and_edit 视图

很多情况下,创建和编辑视图里的页面结构接近相似,在这种情况下,应该 使用 create_and_edit 视图。以 photos 为例:

  • PhotosController@create - 对应视图:/photos/create_and_edit.blade.php

  • PhotosController@edit - 对应 视图:/photos/create_and_edit.blade.php

这样一来,通常情况下,一个完整的 photos 资源对应的视图文件为以下:

├── photos
│   ├── create_and_edit.blade.php
│   ├── index.blade.php
│   └── show.blade.php


7、表单验证定义

7.1、使用基类

所有 FormRequest 表验证类 必须 继承 app/Http/Requests/Request.php 基类。基类文件如下:

<?phpnamespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest;class Request extends FormRequest{
    public function authorize()
    {
        // Using policy for Authorization
        return true;
    }}


7.2、验证类命名

FormRequest 表验证类 必须 遵循 资源路由 方式进行命名,photos 对应 app/Http/Requests/PhotoRequest.php

7.3、类文件参考

FormRequest 表验证类文件请参考以下:

<?phpnamespace App\Http\Requests;class PhotoRequest extends Request{
    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
        ];
    }}