Passed
Push — master ( 6740b1...356763 )
by 世昌
02:25
created

Route::match()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 4
nc 3
nop 1
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
namespace nebula\application;
3
4
use nebula\NebulaApplication;
5
use nebula\application\Request;
6
use nebula\application\module\Manager;
7
use nebula\component\route\RouteMatcher;
8
use nebula\application\route\GroupRoutes;
9
use nebula\application\route\MatchResult;
10
11
/**
12
 * 应用
13
 *
14
 */
15
class Route
16
{
17
    /**
18
     * 路由集合
19
     *
20
     * @var GroupRoutes[]
21
     */
22
    protected $routes;
23
24
25
    /**
26
     * 模块
27
     *
28
     * @var string[]
29
     */
30
    protected $module;
31
32
33
    /**
34
     * 应用
35
     *
36
     * @var NebulaApplication
37
     */
38
    protected $applicaton;
39
40
    public function __construct(NebulaApplication $applicaton)
41
    {
42
        $this->applicaton = $applicaton;
43
        $this->routes = [];
44
    }
45
46
    /**
47
     * 从模块中加载路由
48
     *
49
     * @return void
50
     */
51
    public function loadFromModule(Manager $manager)
52
    {
53
        $groups =  $this->applicaton->getConfig()->get('app.active', ['default']);
54
        foreach ($groups as $group) {
55
            $manager->loadRoute($group, $this);
56
        }
57
    }
58
59
    /**
60
     * 添加分组数据
61
     *
62
     * @param string $group
63
     * @param GroupRoutes $route
64
     * @return void
65
     */
66
    public function addGroupRoute(string $group, GroupRoutes $route)
67
    {
68
        if (\array_key_exists($group, $this->routes)) {
69
            $this->routes[$group]->merge($route);
70
        } else {
71
            $this->routes[$group] = $route;
72
        }
73
    }
74
75
    /**
76
     * 匹配路由
77
     *
78
     * @param Request $request
79
     * @return MatchResult|null
80
     */
81
    public function match(Request $request):?MatchResult
82
    {
83
        foreach ($this->routes as $group => $routes) {
84
            if (($result = $routes->match($request)) !== null) {
85
                return $result;
86
            }
87
        }
88
        return null;
89
    }
90
}
91