Passed
Branch v2-dev (d50d65)
by Henri
01:22
created

Router::name()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 8
Bugs 0 Features 3
Metric Value
cc 1
eloc 7
c 8
b 0
f 3
nc 1
nop 1
dl 0
loc 9
rs 10
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
        CurrentTrait;
17
18
    private array $currentRoute = [];
19
    private ?\Exception $error = null;
20
21
    public static function name(string $name): Router
22
    {
23
        self::getInstance()->isInNameGroup();
24
        self::getInstance()->existRouteName($name);
25
        $route = self::getInstance()->inSave();
26
        $route['name'] = $name;
27
        self::getInstance()->routesName[$name] = $name;
28
        self::getInstance()->unsetRoute(array_key_last(self::getInstance()->getRoutes()))->updateRoute($route,$name);
29
        return self::getInstance();
30
    }
31
32
    public static function group(string $prefix, \Closure $closure): Router
33
    {
34
        self::getInstance()->setPrefix($prefix);
35
        self::getInstance()->setGroup(sha1(date('d/m/Y h:m:i')));
36
37
        $closure();
38
39
        self::getInstance()->setGroup(null);
40
        self::getInstance()->setPrefix('');
41
        return self::getInstance();
42
    }
43
44
    public static function load(): RouterInterface
45
    {
46
        self::getInstance()->loaded = true;
47
        self::getInstance()->sortRoutes();
48
49
        foreach(self::getInstance()->getRoutes() as $r => $route){
50
            self::getInstance()->currentRoute = $route;
51
            self::getInstance()->currentRoute['name'] = $r;
52
53
            try{
54
                self::getInstance()->checkMethod($route, $_SERVER['REQUEST_METHOD']);
55
                self::getInstance()->checkData($route, (new Uri($_SERVER['REQUEST_URI']))->getPath());
56
                return self::getInstance();
57
            }catch(\Exception $er){
58
                continue;
59
            }
60
        }
61
        
62
        self::getInstance()->currentRoute = [];
63
        throw new \Exception('Page not found', 404);
64
    }
65
66
    public static function run(): RouterInterface
67
    {
68
        if(!self::getInstance()->loaded){
69
            self::getInstance()->load();
70
        }
71
72
        self::getInstance()->executeBefore();
73
        
74
        try{
75
            self::getInstance()->executeRouteAction();
76
        }catch(\Exception $er){
77
            self::getInstance()->error = $er;
78
        }
79
        
80
        self::getInstance()->executeAfter();
81
        
82
        self::getInstance()->checkError();
83
84
        return self::getInstance();
85
    }
86
87
    private function checkError(): void
88
    {
89
        if(isset($this->error)){
90
            throw $this->error;
91
        }
92
    }
93
   
94
}