Completed
Push — master ( 2f6f54...c29b50 )
by Arman
16s queued 15s
created

ModuleLoader::loadModulesRoutes()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 24
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 12
nc 4
nop 1
dl 0
loc 24
rs 9.8666
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Quantum PHP Framework
5
 *
6
 * An open source software development framework for PHP
7
 *
8
 * @package Quantum
9
 * @author Arman Ag. <[email protected]>
10
 * @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org)
11
 * @link http://quantum.softberg.org/
12
 * @since 2.8.0
13
 */
14
15
namespace Quantum\Router;
16
17
use Quantum\Exceptions\ModuleLoaderException;
18
use Quantum\Libraries\Storage\FileSystem;
19
use Quantum\Exceptions\RouteException;
20
use Quantum\Di\Di;
21
use Closure;
22
23
/**
24
 * Class ModuleLoader
25
 * @package Quantum\Router
26
 */
27
class ModuleLoader
28
{
29
30
    /**
31
     * Load Modules
32
     * @param \Quantum\Router\Router $router
33
     * @throws \Quantum\Exceptions\DiException
34
     * @throws \Quantum\Exceptions\ModuleLoaderException
35
     * @throws \Quantum\Exceptions\RouteException
36
     * @throws \ReflectionException
37
     */
38
    public static function loadModulesRoutes(Router $router)
39
    {
40
        $fs = Di::get(FileSystem::class);
41
42
        $modules = require_once base_dir() . DS . 'shared' . DS . 'config' . DS . 'modules.php';
43
44
        foreach ($modules['modules'] as $module) {
45
            $moduleRoutes = modules_dir() . DS . $module . DS . 'Config' . DS . 'routes.php';
46
47
            if (!$fs->exists($moduleRoutes)) {
48
                throw ModuleLoaderException::notFound($module);
49
            }
50
51
            $routesClosure = require_once $moduleRoutes;
52
53
            if (!$routesClosure instanceof Closure) {
54
                throw RouteException::notClosure();
55
            }
56
57
            $route = new Route($module);
58
59
            $routesClosure($route);
60
61
            $router->setRoutes(array_merge($router->getRoutes(), $route->getRuntimeRoutes()));
62
        }
63
    }
64
65
}
66