KumbiaRouter   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Importance

Changes 0
Metric Value
dl 0
loc 101
rs 10
c 0
b 0
f 0
wmc 15
lcom 0
cbo 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
B rewrite() 0 44 7
B ifRouted() 0 24 6
A getController() 0 11 2
1
<?php
2
/**
3
 * KumbiaPHP web & app Framework
4
 *
5
 * LICENSE
6
 *
7
 * This source file is subject to the new BSD license that is bundled
8
 * with this package in the file LICENSE.
9
 *
10
 * @category   Kumbia
11
 * @package    KumbiaRouter
12
 *
13
 * @copyright  Copyright (c) 2005 - 2019 KumbiaPHP Team (http://www.kumbiaphp.com)
14
 * @license    https://github.com/KumbiaPHP/KumbiaPHP/blob/master/LICENSE   New BSD License
15
 */
16
17
class KumbiaRouter
18
{
19
20
    /**
21
     * Toma $url y la descompone en (modulo), controlador, accion y argumentos
22
     *
23
     * @param string $url
24
     * @return  array
25
     */
26
    public static function rewrite($url)
27
    {
28
        $router = array();
29
        //Valor por defecto
30
        if ($url === '/') {
31
            return $router;
32
        }
33
34
        //Se limpia la url, en caso de que la hallan escrito con el último parámetro sin valor, es decir controller/action/
35
        // Obtiene y asigna todos los parámetros de la url
36
        $urlItems = explode('/', trim($url, '/'));
37
38
        // El primer parámetro de la url es un módulo?
39
        if (is_dir(APP_PATH."controllers/$urlItems[0]")) {
40
            $router['module'] = $urlItems[0];
41
42
            // Si no hay más parámetros sale
43
            if (next($urlItems) === false) {
44
                $router['controller_path'] = "$urlItems[0]/index";
45
                return $router;
46
            }
47
        }
48
49
        // Controlador, cambia - por _
50
        $router['controller']      = str_replace('-', '_', current($urlItems));
51
        $router['controller_path'] = isset($router['module']) ? "$urlItems[0]/".$router['controller'] : $router['controller'];
52
53
        // Si no hay más parámetros sale
54
        if (next($urlItems) === false) {
55
            return $router;
56
        }
57
58
        // Acción
59
        $router['action'] = current($urlItems);
60
61
        // Si no hay más parámetros sale
62
        if (next($urlItems) === false) {
63
            return $router;
64
        }
65
66
        // Crea los parámetros y los pasa
67
        $router['parameters'] = array_slice($urlItems, key($urlItems));
68
        return $router;
69
    }
70
71
    /**
72
     * Busca en la tabla de entutamiento si hay una ruta en config/routes.ini
73
     * para el controlador, accion, id actual
74
     *
75
     * @param string $url Url para enrutar
76
     * @return string
77
     */
78
    public static function ifRouted($url)
79
    {
80
        $routes = Config::get('routes.routes');
81
82
        // Si existe una ruta exacta la devuelve
83
        if (isset($routes[$url])) {
84
            return $routes[$url];
85
        }
86
87
        // Si existe una ruta con el comodín * crea la nueva ruta
88
        foreach ($routes as $key => $val) {
89
            if ($key === '/*') {
90
                return rtrim($val, '*').$url;
91
            }
92
93
            if (strripos($key, '*', -1)) {
94
                $key = rtrim($key, '*');
95
                if (strncmp($url, $key, strlen($key)) == 0) {
96
                    return str_replace($key, rtrim($val, '*'), $url);
97
                }
98
            }
99
        }
100
        return $url;
101
    }
102
103
    /**
104
     * Carga y devuelve una instancia del controllador
105
     */
106
    public static function getController($param)
107
    {
108
        // Extrae las variables para manipularlas facilmente
109
        extract($param, EXTR_OVERWRITE);
110
        if (!include_once "$default_path{$dir}/$controller_path{$suffix}") {
111
            throw new KumbiaException('', 'no_controller');
112
        }
113
        //Asigna el controlador activo
114
        $app_controller = Util::camelcase($controller).'Controller';
115
        return new $app_controller($param);
116
    }
117
}
118