-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcollector.php
115 lines (93 loc) · 3.05 KB
/
collector.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
require_once 'error_handler.php';
require_once 'helpers/middlewares.php';
use DI\Container;
use GuzzleHttp\Psr7\Response;
use GuzzleHttp\Psr7\ServerRequest;
use MakiseCo\Http\Router\RouteCollectorFactory;
use MakiseCo\Http\Router\RouteCollectorInterface;
use MakiseCo\Middleware\ErrorHandlingMiddleware;
use MakiseCo\Middleware\MiddlewarePipeFactory;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
class UserController
{
public function index(ServerRequestInterface $request): ResponseInterface
{
return new Response(
200,
['URI' => $request->getRequestTarget()],
'UserController Index Method'
);
}
}
$collector = (new RouteCollectorFactory())->create(
new Container(),
);
$collector->addRoute(['GET'], '/user', function (): Response {
return new Response(200, [], 'Hello');
});
$collector->addGroup(
'api',
['middleware' => [AddHeaderMiddleware1::class]],
function (RouteCollectorInterface $collector) {
$collector
->get('/balance', function (): Response {
return new Response(200, [], '228');
})
->setName('api_balance')
->withMiddleware(AddHeaderMiddleware2::class);
$collector->post('/posts', function (ServerRequestInterface $request): Response {
$body = $request->getParsedBody();
return new Response(200, [], json_encode($body));
});
$collector->get('/posts/{id:\d+}', function (int $id): Response {
return new Response(200, [], "Post {$id}");
});
$collector->get('/user', 'UserController@index');
}
);
$router = $collector->getRouter();
$app = (new MiddlewarePipeFactory())->create([
new ErrorHandlingMiddleware(new ErrorHandler()), // placing error handling middleware first
$router
]);
function sendRequest(ServerRequestInterface $request): void
{
global $app;
$response = $app->handle($request);
printf("Executed %s %s\n", $request->getMethod(), $request->getRequestTarget());
printf(
"Status: %d, Headers: %s, Content: %s",
$response->getStatusCode(),
json_encode($response->getHeaders()),
$response->getBody()->getContents()
);
printf("\n\n");
}
$request = new ServerRequest('GET', '/user');
sendRequest($request);
$request = new ServerRequest('GET', '/api/balance');
sendRequest($request);
$request = (new ServerRequest(
'POST',
'/api/posts',
['Content-Type' => 'application/x-www-form-urlencoded'],
))->withParsedBody(
[
'title' => 'Article 1',
'content' => 'Article about PHP',
'author_id' => 1,
]
);
sendRequest($request);
$request = new ServerRequest('GET', '/api/posts/123');
sendRequest($request);
$request = new ServerRequest('GET', '/api/user');
sendRequest($request);
$request = new ServerRequest('GET', '/api/not-found');
sendRequest($request);
$request = new ServerRequest('POST', '/api/user');
sendRequest($request);