瀏覽代碼

校天犬开发规范

onetobig 4 年之前
當前提交
4cce2bde8c
共有 1 個文件被更改,包括 220 次插入0 次删除
  1. 220 0
      校天犬开发规范.md

+ 220 - 0
校天犬开发规范.md

@@ -0,0 +1,220 @@
+# 校天犬开发规范
+## 一 路由
+### 1、命名为单词复数,多个单词组成用`-`分割
+
+### 2、方法
+`create` 添加之前查预备数据
+`store` 添加
+`destroy` 删除
+`update` 更新
+`edit` 编辑(更新之前查数据)
+`index` 对应没有权限判断的列表数据,首页等
+`list` 后台用户调取数据列表(一般有权限判断)
+
+其他方法命名以这些单词为基础,例如:`storeItem`,`recordList` 等等
+
+### 3、每个路由要取一个唯一的名字,名字和路径类似,例如:`study-banners.store`
+```php
+    // banner
+    Route::post('study-banners/store', 'StudyBannersController@store')->name('study-banners.store');
+    Route::post('study-banners/destroy', 'StudyBannersController@destroy')->name('study-banners.destroy');
+    Route::post('study-banners/update', 'StudyBannersController@update')->name('study-banners.update');
+    Route::post('study-banners/edit', 'StudyBannersController@edit')->name('study-banners.edit');
+    Route::post('study-banners/list', 'StudyBannersController@list')->name('study-banners.list');
+```
+## 2、控制器
+### 1、控制器命名为单词的复数,例如:`CardsController`
+### 2、所有接口控制器继承 `ApisController`
+### 3、返回值
+#### 3.1 返回模型数据要用`API RESOURCE` 处理后返回例如:
+```php
+$activity = Activity::latest()->first();
+$activity = new ActivityResource($activity);
+return $this->success($activity);
+```
+[resource 文档](https://learnku.com/docs/laravel/7.x/eloquent-resources/7503 "resource 文档")
+#### 3.2 直接返回数组数据
+```php
+return $this->success([
+   'no' => '20200702001164102',
+]);
+```
+对应返回值如下:
+```json
+// 单独数据体
+{
+    "status": "success",                // 成功返回固定值
+    "code": 200,                        // 固定 200
+    "data": {                           // 数据包
+        "no": "20200702001164102"       // 具体数据
+    },
+    "msg": "操作成功",                  // 提示消息
+    "msgTime": 1500,                   // 提示消息展示时长,表示 1.5 秒
+}
+// 数据列表
+{
+    "status": "success",                // 成功返回固定值
+    "code": 200,                        // 固定 200
+    "data": {                           // 接口主体数据包
+        {
+            "id": 1,
+            "desc": "最高50%佣金,日入千元不是梦",
+            "name": "高额佣金",
+            "image": "https://card.xmfinger.com/frontend/icons/vip_im.png"
+        },
+        {
+            "id": 2,
+            "desc": "轻松拥有自己的线上商城",
+            "name": "商城功能",
+            "image": "https://card.xmfinger.com/frontend/icons/vip_shop.png"
+        }, 
+    },
+    "meta": {  // 其他附带数据,用 meta 包含
+        "vip_privileges": [
+            {
+                "id": 1,
+                "desc": "最高50%佣金,日入千元不是梦",
+                "name": "高额佣金",
+                "image": "https://card.xmfinger.com/frontend/icons/vip_im.png"
+            },
+            {
+                "id": 2,
+                "desc": "轻松拥有自己的线上商城",
+                "name": "商城功能",
+                "image": "https://card.xmfinger.com/frontend/icons/vip_shop.png"
+            },
+    }
+    "msg": "操作成功",                  // 提示消息
+    "msgTime": 1500,                   // 提示消息展示时长,表示 1.5 秒
+}
+```
+#### 3.3 直接返回消息
+```php
+return $this->message('操作成功');
+```
+对应返回值如下:
+```json
+{
+    "status": "success",                // 成功返回固定值
+    "code": 200,                        // 固定 200
+    "msg": "操作成功",                  // 提示消息
+    "msgTime": 1500,                   // 提示消息展示时长,表示 1.5 秒
+}
+```
+#### 3.4 返回分页信息操作
+```php
+<?php
+use App\Api\Helpers\PaginateHelper;
+class AskLeavesController extends ApiController
+{
+    use PaginateHelper;
+    public function index(Request $request)
+    {
+	    // 从路由获取当前机构,大部分方法都要用
+        $institution = get_institution_from_route();
+		// 当前授权的用户
+        $user = $request->user();
+		// 查询数据库,获取分页数据
+        $res = AskLeave::query()
+            ->where('child_id', $child->id)
+            ->orderBy('id', 'desc')
+            ->with('child', 'courseSetting', 'user')
+            ->paginate(12);
+		// 处理成统一格式的分页数据
+        $res = $this->paginate($res, AskLeaveResrouce::class);
+		// 其他附带数据
+        $res['meta']['child'] = new ChildResource($child);
+        // 返回
+        return $this->res( $res);
+	}
+}
+```
+返回示例:
+```json
+{
+    "status": "success",
+    "code": 200,
+    "data": [
+        {
+            "id": 130,
+            "count": 1,
+            "leaave": 0,
+            "leave": 0,
+            "reason": "有事不能来",
+            "date": "2019-12-10 00:00:00",
+            "date_name": "2019-12-10 周二",
+            "user_name": "onetobigs",
+            "course_setting_name": "幼儿书法",
+            "created_at": "2020-07-06 14:30:43",
+            "updated_at": "2020-07-06 14:30:43",
+            "created_date": "2020-07-06 周一"
+        }
+    ],
+    "links": {
+        "first": "http://xiaotq.demo/api/ask-leave/index?page=1",
+        "last": "http://xiaotq.demo/api/ask-leave/index?page=1",
+        "prev": null,
+        "next": null
+    },
+    "meta": {
+        "current_page": 1,
+        "form": 1,
+        "last_page": 1,
+        "path": "http://xiaotq.demo/api/ask-leave/index",
+        "per_page": 12,
+        "to": 1,
+        "total": 1,
+        "child": {
+            "id": 34,
+            "name": "媛媛",
+            "avatar": "https://wx.qlogo.cn/mmopen/vi_32/QNPjGP8JnqNUUuxzgFw9UM3xk44WDB4OXmxPyEpCNzrWDE8ibVIDeEmNSWd556He3Se4oBoGuJvN1ThtAw1Vo6Q/132",
+            "en_name": "",
+            "gender": 2,
+            "gender_name": "女",
+            "birthday": "2019-12-05",
+            "school": "",
+            "first_letter": "Y",
+            "relation": "爸爸",
+            "type": 1,
+            "type_name": "常规学员",
+            "status": 0,
+            "status_name": "正常",
+            "tags": [],
+            "phone": "13055246008",
+            "address": "软件园三期A区06栋(厦门市集美区)",
+            "signing": true,
+            "check": false
+        }
+    },
+    "msg": "操作成功",
+    "msgTime": 1500,
+    "server_time": 1594017047,
+    "msgShow": false
+}
+```
+### 4、错误返回
+```php
+error_msg('错误提示信息');
+```
+对应效果
+```json
+{
+    "status": "error",
+    "code": 400,
+    "msg": "错误提示信息",
+    "msgTime": 1500,
+    "server_time": 1594017221,
+    "msgShow": false
+}
+```
+## 三、其他规范
+### 1、代码规范参考下面链接
+[代码规范](https://learnku.com/docs/laravel-specification/7.x "代码规范")
+### 2、代码自动格式化
+```shell
+composer global require squizlabs/php_codesniffer
+```
+![格式化设置1](https://cdn.learnku.com/uploads/images/202007/06/10907/5YgeivhMdu.png!large "格式化设置1")
+
+### 3、git 开发分支在 `dev` 分支,提交前先拉取
+