Passed
Push — dev ( 8e1c31...1930e5 )
by 世昌
02:24
created

ApplicationLoader::loadGlobalConfig()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 5
c 1
b 0
f 0
nc 4
nop 0
dl 0
loc 8
rs 10
1
<?php
2
3
namespace suda\application\loader;
4
5
use suda\application\Module;
6
use suda\framework\loader\Loader;
7
use suda\application\database\Database;
8
use suda\database\exception\SQLException;
9
use suda\framework\filesystem\FileSystem;
10
11
/**
12
 * 应用程序
13
 */
14
class ApplicationLoader extends ApplicationBaseLoader
15
{
16
17
    const CACHE_ROUTE = 'application-route';
18
    const CACHE_ROUTE_RUNNABLE = 'application-route-runnable';
19
20
    /**
21
     * 加载APP
22
     */
23
    public function load()
24
    {
25
        $this->loadVendorIfExist();
26
        $this->loadGlobalConfig();
27
        $this->loadModule();
28
        LanguageLoader::load($this->application);
29
    }
30
31
    /**
32
     * 加载路由
33
     */
34
    public function loadRoute()
35
    {
36
        $name = 'application-route';
37
        $this->application->debug()->time($name);
38
        if (static::isDebug()) {
39
            $this->loadRouteFromModules();
40
            if ($this->application->getRoute()->isContainClosure()) {
41
                $this->application->debug()->warning('route contain closure, route prepare cannot be cacheables');
42
            } else {
43
                $this->application->cache()->set(ApplicationLoader::CACHE_ROUTE, $this->application->getRoute()->getRouteCollection());
44
                $this->application->cache()->set(ApplicationLoader::CACHE_ROUTE_RUNNABLE, $this->application->getRoute()->getRunnable());
45
            }
46
        } elseif ($this->routeCacheAvailable()) {
47
            $route = $this->application->cache()->get(ApplicationLoader::CACHE_ROUTE);
48
            $runnable = $this->application->cache()->get(ApplicationLoader::CACHE_ROUTE_RUNNABLE);
49
            $this->application->getRoute()->setRouteCollection($route);
50
            $this->application->getRoute()->setRunnable($runnable);
51
            $this->application->debug()->info('load route from cache');
52
        } else {
53
            $this->loadRouteFromModules();
54
        }
55
        $this->application->debug()->timeEnd($name);
56
    }
57
58
    /**
59
     * 从模块中加载路由
60
     */
61
    private function loadRouteFromModules()
62
    {
63
        foreach ($this->application->getModules() as $name => $module) {
64
            if ($module->getStatus() === Module::REACHABLE) {
65
                call_user_func([$this->moduleLoader[$name], 'toReachable']);
66
            }
67
        }
68
    }
69
70
    /**
71
     * @return bool
72
     */
73
    private function routeCacheAvailable()
74
    {
75
        return $this->application->cache()->has(ApplicationLoader::CACHE_ROUTE)
76
            && $this->application->cache()->has(ApplicationLoader::CACHE_ROUTE_RUNNABLE);
77
    }
78
79
}
80