shipengfei

Update lumen_rule_controller.md

1 -## LUMEN+API Controller 规范 1 +## LUMEN+API Controller 规范
2 2
3 -### 1. 第三方依赖库规范 3 +### 1. 第三方依赖库规范
4 4
5 -在使用LUMEN实现API接口时,以下库必须需要包含在composer包依赖中,以实现代码编写的一些规范 5 +在使用LUMEN实现API接口时,以下库必须需要包含在composer包依赖中,以实现代码编写的一些规范
6 6
7 -* dingo/api : 实现API接口库 7 +* dingo/api : 实现API接口库
8 -* vlucas/phpdotenv : 实现了配置文件读取的函数,包括env()函数等 8 +* vlucas/phpdotenv : 实现了配置文件读取的函数,包括env()函数等
9 -* marc-mabe/php-enum : 实现php的ENUM功能 9 +* marc-mabe/php-enum : 实现php的ENUM功能
10 -* barryvdh/laravel-ide-helper : IDE帮助,_ide_helper.php文件提供 10 +* barryvdh/laravel-ide-helper : IDE帮助,_ide_helper.php文件提供
11 11
12 12
13 13
14 -### 2. Controller规范 14 +### 2. Controller规范
15 15
16 -* 所有Controller的基类以编写定义的BasicController为准。BasicController实现了一些基本的HTTP请求和应答功能。如$requestHander变量处理请求,respond函数处理应答。Trait类UtilToolMethod实现了通用功能函数。 16 +* 所有Controller的基类以编写定义的BasicController为准。BasicController实现了一些基本的HTTP请求和应答功能。如$requestHander变量处理请求,respond函数处理应答。Trait类UtilToolMethod实现了通用功能函数。
17 17
18 -* 所有的Controller不再使用Request对象,而使用BasicController中的$requestHandler变量。 18 +* 所有的Controller不再使用Request对象,而使用BasicController中的$requestHandler变量。
19 19
20 -* $requestHandler变量使用不再推荐使用数组形式结构获得参数变量,而使用使用其暴露的方法 20 +* $requestHandler变量使用不再推荐使用数组形式结构获得参数变量,而使用使用其暴露的方法
21 21
22 ```php 22 ```php
23 $this->requestHandler->input('key1',''); 23 $this->requestHandler->input('key1','');
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
29 $this->requestHandler->path(); 29 $this->requestHandler->path();
30 ``` 30 ```
31 31
32 -* 对于请求参数的验证,统一使用validate方法 32 +* 对于请求参数的验证,统一使用validate方法
33 33
34 ```php 34 ```php
35 $this->validate($this->requestHandler,[ 35 $this->validate($this->requestHandler,[
...@@ -37,11 +37,11 @@ ...@@ -37,11 +37,11 @@
37 ]); 37 ]);
38 ``` 38 ```
39 39
40 -* 对于自己业务有特殊需求的,在BasicController基础上,扩展Controller的功能和方法。 然后再让其它的Controller类继承这个定义的Controller 40 +* 对于自己业务有特殊需求的,在BasicController基础上,扩展Controller的功能和方法。 然后再让其它的Controller类继承这个定义的Controller
41 41
42 ```php 42 ```php
43 /** 43 /**
44 - * 应用授权用户基类,提供用户数据及用户操作方法 44 + * 应用授权用户基类,提供用户数据及用户操作方法
45 */ 45 */
46 class UserAuthBasicControll extends BaiscController 46 class UserAuthBasicControll extends BaiscController
47 { 47 {
...@@ -60,11 +60,11 @@ ...@@ -60,11 +60,11 @@
60 */ 60 */
61 public function getEmpUser() { return $this->_empUser; } 61 public function getEmpUser() { return $this->_empUser; }
62 62
63 - public function userSiteAccess($pointSiteId) { /* 实现权限验证.. */ } 63 + public function userSiteAccess($pointSiteId) { /* 实现权限验证.. */ }
64 } 64 }
65 ``` 65 ```
66 66
67 -* Controller层函数使用对象的自动注入依赖。 67 +* Controller层函数使用对象的自动注入依赖。
68 68
69 ```php 69 ```php
70 class CustomerController 70 class CustomerController
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
73 private $_crmService = null; 73 private $_crmService = null;
74 74
75 public function __construct(CRMService $crmService) { 75 public function __construct(CRMService $crmService) {
76 - $this->_crmService = $crmService; // 自动注入依赖 76 + $this->_crmService = $crmService; // 自动注入依赖
77 } 77 }
78 78
79 public function customerEnterIn($userInfo) { 79 public function customerEnterIn($userInfo) {
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
82 } 82 }
83 ``` 83 ```
84 84
85 -* Controller层不能直接操作SQL,不能直接操作Model对象实现SQL功能。要实现数据库**增删改**,必须通过Model封装起来。以下方法在Controller中直接操作DB表都是被禁止的 85 +* Controller层不能直接操作SQL,不能直接操作Model对象实现SQL功能。要实现数据库**增删改**,必须通过Model封装起来。以下方法在Controller中直接操作DB表都是被禁止的
86 86
87 ```php 87 ```php
88 class SomeController 88 class SomeController
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
93 DB::table('users')->truncate(); 93 DB::table('users')->truncate();
94 } 94 }
95 95
96 - /* 对于查询来说,简单的查询可以在Controller直接完成,复杂的查询需要通过Model层添加方法来完成 */ 96 + /* 对于查询来说,简单的查询可以在Controller直接完成,复杂的查询需要通过Model层添加方法来完成 */
97 public function userOperator() { 97 public function userOperator() {
98 $id = 100; 98 $id = 100;
99 $userInstance1 = User::find($id); 99 $userInstance1 = User::find($id);
...@@ -103,46 +103,46 @@ ...@@ -103,46 +103,46 @@
103 } 103 }
104 ``` 104 ```
105 105
106 -* Controller通过调用Model层,自定义Service层,Event, Queue来完成自身的业务逻辑。但是在Controller层,尽量做到对于底层服务的底耦合,为了能够更好的测度,也尽量使用对象的依赖注入。 106 +* Controller通过调用Model层,自定义Service层,Event, Queue来完成自身的业务逻辑。但是在Controller层,尽量做到对于底层服务的底耦合,为了能够更好的测度,也尽量使用对象的依赖注入。
107 107
108 -* Controller层与其它层的一般关系如下 108 +* Controller层与其它层的一般关系如下
109 109
110 ```sequence 110 ```sequence
111 - Router ->> Controller : 数据请求 111 + Router ->> Controller : 数据请求
112 - Controller ->> Controller : 处理用户请求 112 + Controller ->> Controller : 处理用户请求
113 - Controller ->> Model : 数据业务处理 113 + Controller ->> Model : 数据业务处理
114 - Model -> Model : 数据查询更新 114 + Model -> Model : 数据查询更新
115 - Model -> Service : 业务逻辑处理 115 + Model -> Service : 业务逻辑处理
116 - Controller ->> Service : 业务逻辑处理 116 + Controller ->> Service : 业务逻辑处理
117 - Service --> ClientAPI : 服务请求处理 117 + Service --> ClientAPI : 服务请求处理
118 - ClientAPI --> Service : 服务应答 118 + ClientAPI --> Service : 服务应答
119 - Service --> Controller : 业务处理结果 119 + Service --> Controller : 业务处理结果
120 - Controller --> Router : 数据应答 120 + Controller --> Router : 数据应答
121 ``` 121 ```
122 122
123 -* 如果要实现程序异步机制,请使用Lumen提供的Queue功能。异步机制的使用可以提高API的应答效率,以下场景比如事件机制的接收处理,对于延时的任务机制,也需要通过Queue功能完成 123 +* 如果要实现程序异步机制,请使用Lumen提供的Queue功能。异步机制的使用可以提高API的应答效率,以下场景比如事件机制的接收处理,对于延时的任务机制,也需要通过Queue功能完成
124 124
125 ```sequence 125 ```sequence
126 - Router -> Controller : 数据请求 126 + Router -> Controller : 数据请求
127 - Controller -> Controller : 处理请求 127 + Controller -> Controller : 处理请求
128 - Controller --> QueueJob : 任务添加Dispatcher 128 + Controller --> QueueJob : 任务添加Dispatcher
129 - Controller --> Router : 数据应答 129 + Controller --> Router : 数据应答
130 - QueueJob -> QueueJob : 任务调度 130 + QueueJob -> QueueJob : 任务调度
131 - QueueJob -> JobProcedure : JOB处理 131 + QueueJob -> JobProcedure : JOB处理
132 - JobProcedure -> Model : 数据应务处理 132 + JobProcedure -> Model : 数据应务处理
133 ``` 133 ```
134 134
135 -* 如果编写与业务无关的类库、服务等应用,需要与上层的Controller/Model解耦,当需要有数据或者事件通知到上层应用,并让上层应用决定做出处理时,那么可以利用Event事件机制。 135 +* 如果编写与业务无关的类库、服务等应用,需要与上层的Controller/Model解耦,当需要有数据或者事件通知到上层应用,并让上层应用决定做出处理时,那么可以利用Event事件机制。
136 136
137 ```sequence 137 ```sequence
138 - Controller -> EventListener : 订阅事件 138 + Controller -> EventListener : 订阅事件
139 - MyService -> MyService : 业务处理 139 + MyService -> MyService : 业务处理
140 - MyService -> Event : 派发事件 140 + MyService -> Event : 派发事件
141 - Event --> EventListener : 事件触发 141 + Event --> EventListener : 事件触发
142 - EventListener -> EventListener : 事件处理 142 + EventListener -> EventListener : 事件处理
143 ``` 143 ```
144 144
145 -* Controller层的处理只作出正常的返回处理,而不对异常情况进行返回,遇到异常情况时,通过Exception的机制进行数据的返回。 145 +* Controller层的处理只作出正常的返回处理,而不对异常情况进行返回,遇到异常情况时,通过Exception的机制进行数据的返回。
146 146
147 ```php 147 ```php
148 public function dosth() { 148 public function dosth() {
...@@ -155,18 +155,16 @@ ...@@ -155,18 +155,16 @@
155 } 155 }
156 ``` 156 ```
157 157
158 -* BasicController,BaseModel有UtilToolMethods的相关方法,实现了以下的基本功能 158 +* BasicController,BaseModel有UtilToolMethods的相关方法,实现了以下的基本功能
159 159
160 - | 索引 | 方法名 | 备注 | 160 + | 索引 | 方法名 | 备注 |
161 | ---- | --------------- | ---------------------------------- | 161 | ---- | --------------- | ---------------------------------- |
162 - | 1 | arrValidate | 实现以数组字典数据的验证 |
163 - | 2 | dispatchJob | 派发事件 |
164 - | 3 | utilToArray | 将对象转换为数组 |
165 - | 4 | getConfigValue | 获得配置文件中的值 |
166 - | 5 | arrayEncode | 将字典Hash成一个字符串,一般用来实现CacheKey |
167 - | 6 | getEnv | 获得环境变量名称: 有dev/testing/production/ |
168 - | 7 | envIsTesting | 判断环境是否测试环境 |
169 - | 8 | envIsDemo | 判断环境是否环境 |
170 - | 9 | envIsProduction | 判断环境是否生产环境 |
171 -
172 - ?
...\ No newline at end of file ...\ No newline at end of file
162 + | 1 | arrValidate | 实现以数组字典数据的验证 |
163 + | 2 | dispatchJob | 派发事件 |
164 + | 3 | utilToArray | 将对象转换为数组 |
165 + | 4 | getConfigValue | 获得配置文件中的值 |
166 + | 5 | arrayEncode | 将字典Hash成一个字符串,一般用来实现CacheKey |
167 + | 6 | getEnv | 获得环境变量名称: 有dev/testing/production/ |
168 + | 7 | envIsTesting | 判断环境是否测试环境 |
169 + | 8 | envIsDemo | 判断环境是否环境 |
170 + | 9 | envIsProduction | 判断环境是否生产环境 |
......