Toggle navigation
Toggle navigation
This project
Loading...
Sign in
qingger
/
allProject
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
shipengfei
2017-03-30 14:19:37 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
87313526c3010411b6a9376ce357fc144a209faa
87313526
1 parent
c12f1ea8
Update lumen_rule_controller.md
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
57 additions
and
59 deletions
Docs/Rules/lumen_rule_controller.md
Docs/Rules/lumen_rule_controller.md
View file @
8731352
## LUMEN+API Controller
规范
## LUMEN+API Controller
规范
### 1.
第三方依赖库规范
### 1.
第三方依赖库规范
在使用LUMEN实现API接口时,以下库必须需要包含在composer包依赖中,以实现代码编写的一些规范
在使用LUMEN实现API接口时,以下库必须需要包含在composer包依赖中,以实现代码编写的一些规范
*
dingo/api :
实现API接口库
*
vlucas/phpdotenv :
实现了配置文件读取的函数,包括env()函数等
*
marc-mabe/php-enum :
实现php的ENUM功能
*
barryvdh/laravel-ide-helper : IDE
帮助,_ide_helper.php文件提供
*
dingo/api :
实现API接口库
*
vlucas/phpdotenv :
实现了配置文件读取的函数,包括env()函数等
*
marc-mabe/php-enum :
实现php的ENUM功能
*
barryvdh/laravel-ide-helper : IDE
帮助,_ide_helper.php文件提供
### 2. Controller
规范
### 2. Controller
规范
*
所有Controller的基类以编写定义的BasicController为准。BasicController实现了一些基本的HTTP请求和应答功能。如$requestHander变量处理请求,respond函数处理应答。Trait类UtilToolMethod实现了通用功能函数。
*
所有Controller的基类以编写定义的BasicController为准。BasicController实现了一些基本的HTTP请求和应答功能。如$requestHander变量处理请求,respond函数处理应答。Trait类UtilToolMethod实现了通用功能函数。
*
所有的Controller不再使用Request对象,而使用BasicController中的$requestHandler变量。
*
所有的Controller不再使用Request对象,而使用BasicController中的$requestHandler变量。
*
$requestHandler
变量使用不再推荐使用数组形式结构获得参数变量,而使用使用其暴露的方法
*
$requestHandler
变量使用不再推荐使用数组形式结构获得参数变量,而使用使用其暴露的方法
```
php
$this->requestHandler->input('key1','');
...
...
@@ -29,7 +29,7 @@
$this->requestHandler->path();
```
*
对于请求参数的验证,统一使用validate方法
*
对于请求参数的验证,统一使用validate方法
```
php
$this->validate($this->requestHandler,[
...
...
@@ -37,11 +37,11 @@
]);
```
*
对于自己业务有特殊需求的,在BasicController基础上,扩展Controller的功能和方法。 然后再让其它的Controller类继承这个定义的
Controller
*
对于自己业务有特殊需求的,在BasicController基础上,扩展Controller的功能和方法。 然后再让其它的Controller类继承这个定义的Controller
```
php
/**
*
应用授权用户基类,提供用户数据及用户操作方法
*
应用授权用户基类,提供用户数据及用户操作方法
*/
class UserAuthBasicControll extends BaiscController
{
...
...
@@ -60,11 +60,11 @@
*/
public function getEmpUser() { return $this->_empUser; }
public function userSiteAccess($pointSiteId) { /*
实现权限验证
.. */ }
public function userSiteAccess($pointSiteId) { /*
实现权限验证..
*/ }
}
```
*
Controller
层函数使用对象的自动注入依赖。
*
Controller
层函数使用对象的自动注入依赖。
```
php
class CustomerController
...
...
@@ -73,7 +73,7 @@
private $_crmService = null;
public function __construct(CRMService $crmService) {
$this->_crmService = $crmService; //
自动注入依赖
$this->_crmService = $crmService; //
自动注入依赖
}
public function customerEnterIn($userInfo) {
...
...
@@ -82,7 +82,7 @@
}
```
*
Controller
层不能直接操作SQL,不能直接操作Model对象实现SQL功能。要实现数据库
**增删改**
,必须通过Model封装起来。以下方法在Controller中直接操作DB表都是被禁止的
*
Controller
层不能直接操作SQL,不能直接操作Model对象实现SQL功能。要实现数据库
**增删改**
,必须通过Model封装起来。以下方法在Controller中直接操作DB表都是被禁止的
```
php
class SomeController
...
...
@@ -93,7 +93,7 @@
DB::table('users')->truncate();
}
/*
对于查询来说,简单的查询可以在Controller直接完成,复杂的查询需要通过Model层添加方法来完成
*/
/*
对于查询来说,简单的查询可以在Controller直接完成,复杂的查询需要通过Model层添加方法来完成 */
public function userOperator() {
$id = 100;
$userInstance1 = User::find($id);
...
...
@@ -103,46 +103,46 @@
}
```
*
Controller
通过调用Model层,自定义Service层,Event, Queue来完成自身的业务逻辑。但是在Controller层,尽量做到对于底层服务的底耦合,为了能够更好的测度,也尽量使用对象的依赖注入。
*
Controller
通过调用Model层,自定义Service层,Event, Queue来完成自身的业务逻辑。但是在Controller层,尽量做到对于底层服务的底耦合,为了能够更好的测度,也尽量使用对象的依赖注入。
*
Controller
层与其它层的一般关系如下
*
Controller
层与其它层的一般关系如下
```
sequence
Router ->> Controller :
数据请求
Controller ->> Controller :
处理用户请求
Controller ->> Model :
数据业务处理
Model -> Model :
数据查询更新
Model -> Service :
业务逻辑处理
Controller ->> Service :
业务逻辑处理
Service --> ClientAPI :
服务请求处理
ClientAPI --> Service :
服务应答
Service --> Controller :
业务处理结果
Controller --> Router :
数据应答
Router ->> Controller :
数据请求
Controller ->> Controller :
处理用户请求
Controller ->> Model :
数据业务处理
Model -> Model :
数据查询更新
Model -> Service :
业务逻辑处理
Controller ->> Service :
业务逻辑处理
Service --> ClientAPI :
服务请求处理
ClientAPI --> Service :
服务应答
Service --> Controller :
业务处理结果
Controller --> Router :
数据应答
```
*
如果要实现程序异步机制,请使用Lumen提供的Queue功能。异步机制的使用可以提高API的应答效率,以下场景比如事件机制的接收处理,对于延时的任务机制,也需要通过Queue功能完成
*
如果要实现程序异步机制,请使用Lumen提供的Queue功能。异步机制的使用可以提高API的应答效率,以下场景比如事件机制的接收处理,对于延时的任务机制,也需要通过Queue功能完成
```
sequence
Router -> Controller :
数据请求
Controller -> Controller :
处理请求
Controller --> QueueJob :
任务添加
Dispatcher
Controller --> Router :
数据应答
QueueJob -> QueueJob :
任务调度
QueueJob -> JobProcedure : JOB
处理
JobProcedure -> Model :
数据应务处理
Router -> Controller :
数据请求
Controller -> Controller :
处理请求
Controller --> QueueJob :
任务添加Di
spatcher
Controller --> Router :
数据应答
QueueJob -> QueueJob :
任务调度
QueueJob -> JobProcedure : JOB
处理
JobProcedure -> Model :
数据应务处理
```
*
如果编写与业务无关的类库、服务等应用,需要与上层的Controller/Model解耦,当需要有数据或者事件通知到上层应用,并让上层应用决定做出处理时,那么可以利用Event事件机制。
*
如果编写与业务无关的类库、服务等应用,需要与上层的Controller/Model解耦,当需要有数据或者事件通知到上层应用,并让上层应用决定做出处理时,那么可以利用Event事件机制。
```
sequence
Controller -> EventListener :
订阅事件
MyService -> MyService :
业务处理
MyService -> Event :
派发事件
Event --> EventListener :
事件触发
EventListener -> EventListener :
事件处理
Controller -> EventListener :
订阅事件
MyService -> MyService :
业务处理
MyService -> Event :
派发事件
Event --> EventListener :
事件触发
EventListener -> EventListener :
事件处理
```
*
Controller
层的处理只作出正常的返回处理,而不对异常情况进行返回,遇到异常情况时,通过Exception的机制进行数据的返回。
*
Controller
层的处理只作出正常的返回处理,而不对异常情况进行返回,遇到异常情况时,通过Exception的机制进行数据的返回。
```
php
public function dosth() {
...
...
@@ -155,18 +155,16 @@
}
```
*
BasicController
,BaseModel有UtilToolMethods的相关方法,实现了以下的基本功能
*
BasicController
,BaseModel有UtilToolMethods的相关方法,实现了以下的基本功能
|
索引 | 方法名 | 备注
|
|
索引 | 方法名 | 备注
|
| ---- | --------------- | ---------------------------------- |
| 1 | arrValidate | 实现以数组字典数据的验证 |
| 2 | dispatchJob | 派发事件 |
| 3 | utilToArray | 将对象转换为数组 |
| 4 | getConfigValue | 获得配置文件中的值 |
| 5 | arrayEncode | 将字典Hash成一个字符串,一般用来实现CacheKey |
| 6 | getEnv | 获得环境变量名称: 有dev/testing/production/ |
| 7 | envIsTesting | 判断环境是否测试环境 |
| 8 | envIsDemo | 判断环境是否环境 |
| 9 | envIsProduction | 判断环境是否生产环境 |
?
\ No newline at end of file
| 1 | arrValidate | 实现以数组字典数据的验证 |
| 2 | dispatchJob | 派发事件 |
| 3 | utilToArray | 将对象转换为数组 |
| 4 | getConfigValue | 获得配置文件中的值 |
| 5 | arrayEncode | 将字典Hash成一个字符串,一般用来实现CacheKey |
| 6 | getEnv | 获得环境变量名称: 有dev/testing/production/ |
| 7 | envIsTesting | 判断环境是否测试环境 |
| 8 | envIsDemo | 判断环境是否环境 |
| 9 | envIsProduction | 判断环境是否生产环境 |
...
...
Please
register
or
login
to post a comment