-
Notifications
You must be signed in to change notification settings - Fork 699
/
Copy pathtest.php
61 lines (51 loc) · 1.82 KB
/
test.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
/**
* 行为型模式
*
* php责任链模式
* 理解:把一个对象传递到一个对象链上,直到有对象处理这个对象
* 可以干什么:我们可以做一个filter,或者gateway
*
*
* @author TIGERB <https://github.com/TIGERB>
* @example 运行 php test.php
*/
// 注册自加载
spl_autoload_register('autoload');
function autoload($class)
{
require dirname($_SERVER['SCRIPT_FILENAME']) . '//..//' . str_replace('\\', '/', $class) . '.php';
}
/************************************* test *************************************/
use chainOfResponsibility\HandlerAccessToken;
use chainOfResponsibility\HandlerFrequent;
use chainOfResponsibility\HandlerArguments;
use chainOfResponsibility\HandlerSign;
use chainOfResponsibility\HandlerAuthority;
use chainOfResponsibility\Request;
try {
// 下面我们用责任链模式实现一个api-gateway即接口网关
// 初始化一个请求对象
$request = new Request();
// 设置一个请求身份id
$request->requestId = uniqid();
// 初始化一个:令牌校验的handler
$handlerAccessToken = new HandlerAccessToken();
// 初始化一个:访问频次校验的handler
$handlerFrequent = new HandlerFrequent();
// 初始化一个:必传参数校验的handler
$handlerArguments = new HandlerArguments();
// 初始化一个:签名校验的handler
$handlerSign = new HandlerSign();
// 初始化一个:访问权限校验的handler
$handlerAuthority = new HandlerAuthority();
// 构成对象链
$handlerAccessToken->setNext($handlerFrequent)
->setNext($handlerArguments)
->setNext($handlerSign)
->setNext($handlerAuthority);
// 启动网关
$handlerAccessToken->start($request);
} catch (\Exception $e) {
echo $e->getMessage();
}