@@ -17,54 +17,75 @@ See comments inside code for more details.
17
17
18
18
declare(strict_types=1);
19
19
20
+ use Phalcon\Di\Di;
20
21
use Phalcon\Mvc\Micro;
21
22
use Swoole\Http\Request;
22
23
use Swoole\Http\Response;
23
24
use Swoole\Http\Server;
24
25
26
+ $di = new Di();
27
+ $di->setShared('router', new Router(false));
28
+
29
+ $app = new Micro($di);
30
+
31
+ /**
32
+ * Define example GET endpoint with text response.
33
+ */
34
+ $app->get('/', function() {
35
+ return 'Hello World';
36
+ });
37
+
38
+ /**
39
+ * Define example redirect.
40
+ */
41
+ $app->get('/redirect', function () {
42
+ // Redirect is handled by Swoole's Request.
43
+ return ['redirect' => 'https://github.com'];
44
+ });
45
+
46
+ /**
47
+ * Define example json response.
48
+ */
49
+ $app->get('/json', function () {
50
+ // Correct headers will be added from Swoole's Response.
51
+ return ['json' => true];
52
+ });
53
+
25
54
$http = new Server('0.0.0.0', 9501);
26
55
$http->on('start', function () {
27
56
echo "Swoole http server is started at http://127.0.0.1:9501\n";
28
57
});
29
58
30
- $http->on('request', function (Request $request, Response $response) {
31
- $app = new Micro();
32
- $app->setService('request', new \Phalcon\Bridge\Swoole\Request($request), true);
33
- $app->setService('response', new \Phalcon\Bridge\Swoole\Response($response), true);
34
- /**
35
- * We need to define our response handler, because
36
- * default Micro response handler will send output
37
- * into client, meanwhile we just want it to pass
38
- * to the Swoole's response end() method.
39
- */
40
- $app->setResponseHandler(function () use ($app) {
41
- return $app->response->getContent();
42
- });
59
+ $http->on('request', function (Request $request, Response $response) use ($app) {
60
+ $app->setService('request', new \Phalcon\Bridge\Swoole\Request($request));
61
+ $app->setService('response', new \Phalcon\Bridge\Swoole\Response($response));
43
62
44
63
/**
45
64
* Without fallback 404 handler it will crush.
46
65
*/
47
- $app->notFound(function () use ($app) {
48
- $app
49
- ->response
50
- ->setStatusCode(404, 'Not Found')
51
- ->setContent('Not found');
52
- });
53
-
54
- /**
55
- * Define GET endpoint.
56
- */
57
- $app->get('/', function() use ($app) {
58
- $app
59
- ->response
60
- ->setContent('Hello World');
66
+ $app->notFound(function () use ($response) {
67
+ $response->setStatusCode(404, 'Not Found');
61
68
});
62
69
63
70
/**
64
71
* Handle in Phalcon the request and pick response content.
65
72
* Then pass to Swoole and end response.
66
73
*/
67
74
$content = $app->handle($request->server['request_uri']);
75
+ if (!empty($content['redirect'])) {
76
+ $response->redirect($content['redirect'], 301);
77
+ return;
78
+ }
79
+
80
+ if (isset($content['content'])) {
81
+ if (is_array($content['content'])) {
82
+ $response->setHeader('Content-Type', 'application/json');
83
+ $content = json_encode($content['content']);
84
+ } else {
85
+ $content = (string)$content['content'];
86
+ }
87
+ }
88
+
68
89
$response->end($content);
69
90
});
70
91
0 commit comments