Completed
Branch v2.0.0 (addc15)
by Alexander
03:27
created

Application   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 8

Importance

Changes 0
Metric Value
wmc 3
lcom 0
cbo 8
dl 0
loc 55
c 0
b 0
f 0
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A run() 0 31 1
A handleExceptions() 0 20 2
1
<?php
2
/**
3
 * @author Alexander Torosh <[email protected]>
4
 */
5
6
namespace Api;
7
8
use Core\Cache\ApcuCache;
9
use Core\Config\EnvironmentLoader;
10
use Phalcon\Di;
11
use Phalcon\Http\Request;
12
use Phalcon\Http\Response;
13
use Phalcon\Mvc\Micro;
14
use Phalcon\Mvc\Router as PhalconRouter;
15
16
class Application
17
{
18
    public function run()
19
    {
20
        // DI Container
21
        $container = new Di();
22
23
        // Initialize micro app
24
        $app = new Micro($container);
25
26
        // Set serverCache service
27
        $app->setService('serverCache', (new ApcuCache())->init(), true);
28
29
        // Env configuration
30
        $configLoader = new EnvironmentLoader();
31
        $configLoader->setDI($container);
32
        $configLoader->load();
33
34
        // Define default services
35
        $app->setService('router', new PhalconRouter(), true);
36
        $app->setService('request', new Request(), true);
37
        $app->setService('response', new Response(), true);
38
39
        // Initialize API Routing
40
        $apiRouter = new Router();
41
        $apiRouter->init($app);
42
43
        // Handle exceptions
44
        $app = $this->handleExceptions($app);
45
46
        // Handle request
47
        $app->handle($_SERVER['REQUEST_URI']);
48
    }
49
50
    private function handleExceptions(Micro $app): Micro
51
    {
52
        $app->error(
53
            function ($exception) use ($app) {
54
                $code = $exception->getCode() ?: 503;
55
56
                $response = $app->response;
57
                $response->setJsonContent([
58
                    'code' => $code,
59
                    'status' => 'error',
60
                    'message' => $exception->getMessage(),
61
                ]);
62
63
                $response->setStatusCode($code);
64
                $response->send();
65
            }
66
        );
67
68
        return $app;
69
    }
70
}
71