Passed
Branch v2-dev (a5bfb7)
by Henri
01:26
created

Router::checkError()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 2
nc 2
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace HnrAzevedo\Router;
4
5
use HnrAzevedo\Http\Uri;
6
7
class Router implements RouterInterface
8
{
9
    use DefinitionsTrait, 
0 ignored issues
show
Bug introduced by
The trait HnrAzevedo\Router\MiddlewareTrait requires the property $handle which is not provided by HnrAzevedo\Router\Router.
Loading history...
10
        RunInTrait, 
11
        CheckTrait, 
12
        OwnerTrait, 
13
        MiddlewareTrait, 
14
        WhereTrait,
15
        PrioritizeTrait;
16
17
    private array $currentRoute = [];
18
    private string $host = '';
19
    private string $prefix = '';
20
    private ?\Exception $error = null;
21
22
    public static function defineHost(string $host): Router
23
    {
24
        self::getInstance()->host = $host;
25
        return self::getInstance();
26
    }
27
28
    public static function name(string $name): Router
29
    {
30
        self::getInstance()->isInNameGroup();
31
        self::getInstance()->existRouteName($name);
32
        $route = self::getInstance()->inSave();
33
        $route['name'] = $name;
34
        self::getInstance()->routesName[$name] = $name;
35
        self::getInstance()->unsetRoute(array_key_last(self::getInstance()->routes))->updateRoute($route,$name);
36
        return self::getInstance();
37
    }
38
39
    public static function group(string $prefix, \Closure $closure): Router
40
    {
41
        self::getInstance()->prefix = $prefix;
42
        self::getInstance()->group = sha1(date('d/m/Y h:m:i'));
43
44
        $closure();
45
46
        self::getInstance()->group = null;
47
        self::getInstance()->prefix = null;
48
        return self::getInstance();
49
    }
50
51
    public static function current(): array
52
    {
53
        self::getInstance()->hasCurrentRoute();
54
        return self::getInstance()->currentRoute;
55
    }
56
57
    public static function currentName(): string
58
    {
59
        self::getInstance()->hasCurrentRoute();
60
        return self::getInstance()->currentRoute['name'];
61
    }
62
63
    public static function currentAction()
64
    {
65
        self::getInstance()->hasCurrentRoute();
66
        return self::getInstance()->currentRoute['action'];
67
    }
68
69
    public static function load(): RouterInterface
70
    {
71
        self::getInstance()->loaded = true;
72
        self::getInstance()->sortRoutes();
73
74
        foreach(self::getInstance()->routes as $r => $route){
75
            self::getInstance()->currentRoute = $route;
76
            self::getInstance()->currentRoute['name'] = $r;
77
78
            try{
79
                self::getInstance()->checkMethod($route, $_SERVER['REQUEST_METHOD']);
80
                self::getInstance()->checkData($route, (new Uri($_SERVER['REQUEST_URI']))->getPath());
81
                return self::getInstance();
82
            }catch(\Exception $er){
83
                continue;
84
            }
85
        }
86
        
87
        self::getInstance()->currentRoute = [];
88
        throw new \Exception('Page not found', 404);
89
    }
90
91
    public static function run(): RouterInterface
92
    {
93
        if(!self::getInstance()->loaded){
94
            self::getInstance()->load();
95
        }
96
97
        self::getInstance()->executeBefore();
98
        
99
        try{
100
            self::getInstance()->executeRouteAction();
101
        }catch(\Exception $er){
102
            self::getInstance()->error = $er;
103
        }
104
        
105
        self::getInstance()->executeAfter();
106
        
107
        self::getInstance()->checkError();
108
109
        return self::getInstance();
110
    }
111
112
    private function checkError(): void
113
    {
114
        if(isset($this->error)){
115
            throw $this->error;
116
        }
117
    }
118
   
119
}