src/ForeverPHP/Routing/Router.php
public function run()
    {
        // Obtiene la Url base
        $this->getUriBase();

        // Obtiene la ruta actual
        $route = $this->addSlash($this->getRoute());

        // Valida que tipo de ruta se solicito
        $routeContent = null;
        $appName = null;

        if (array_key_exists($route, $this->routes)) {
            $route = $this->routes[$route];

            if ($route['app'] != null) {
                $appName = $route['app'];
                $routeContent = $route;
            } else {
                $routeContent = $route['function'];
            }

            // Registro los parametros pasados en la solicitud
            Request::register();
        } else {
            // Se remueve el ultimo slash ya que rutas complejas no lo requieren
            //$route = self::remove_slash($route);
            if (!$this->loadParamsRoute($route, $routeContent)) {
                $routeContent = null;
            }
        }

        // Agrega las cabeceras a la respuesta de existir
        $this->setHeadersToResponse();

        /*
         * Almacena el nombre de la ruta actual si es que lo tiene, dependiendo
         * si es una ruta normal o compleja y si es funcion o vista.
         */
        if (is_array($route)) {
            $this->nameForRoute = $route['name'];
        } elseif (is_array($routeContent)) {
            $this->nameForRoute = $routeContent['name'];
        }

        /*
         * NOTA: Los decoradores solo pueden ser utilizados en rutas con vistas
         *       no en rutas con funciones anonimas.
         */

        if (is_array($routeContent)) {
            if ($appName == null) {
                $appName = $routeContent['app'];
            }

            // Primero se verifica que la aplicacion este agregada en la configuracion
            $app = App::getInstance();
            if ($app->exists($appName)) {
                $app->load($appName);

                // Cargo el autoload.php, archivo opcional
                $autoloadPath = APPS_ROOT . DS . 'autoload.php';

                if (Storage::exists($autoloadPath)) {
                    include_once $autoloadPath;
                }

                // Ejecuta los decoradores de la ruta si es que hay
                $middlewares = $routeContent['middlewares'];

                if (!is_null($middlewares)) {
                    foreach ($middlewares as $middleware) {
                        $returnValue = $app->getMiddleware($middleware);

                        // Valida si el decorador retorna un Response
                        if ($returnValue instanceof \ForeverPHP\Http\ResponseInterface) {
                            $app->run($returnValue);
                        }
                    }
                }

                $app->run($routeContent);
            } else {
                throw new AppException("La aplicación ($appName) a la que pertenece la vista no esta " .
                    "cargada en settings.php.");
            }
        } elseif (is_callable($routeContent)) {
            $this->runFunction($routeContent);
        } else {
            $this->notView();
        }
    }
public function run()
    {
        // Obtiene la Url base
        $this->getUriBase();

        // Obtiene la ruta actual
        $route = $this->addSlash($this->getRoute());

        // Valida que tipo de ruta se solicito
        $routeContent = null;
        $appName = null;

        if (array_key_exists($route, $this->routes)) {
            $route = $this->routes[$route];

            if ($route['app'] != null) {
                $appName = $route['app'];
                $routeContent = $route;
            } else {
                $routeContent = $route['function'];
            }

            // Registro los parametros pasados en la solicitud
            Request::register();
        } else {
            // Se remueve el ultimo slash ya que rutas complejas no lo requieren
            //$route = self::remove_slash($route);
            if (!$this->loadParamsRoute($route, $routeContent)) {
                $routeContent = null;
            }
        }

        // Agrega las cabeceras a la respuesta de existir
        $this->setHeadersToResponse();

        /*
         * Almacena el nombre de la ruta actual si es que lo tiene, dependiendo
         * si es una ruta normal o compleja y si es funcion o vista.
         */
        if (is_array($route)) {
            $this->nameForRoute = $route['name'];
        } elseif (is_array($routeContent)) {
            $this->nameForRoute = $routeContent['name'];
        }

        /*
         * NOTA: Los decoradores solo pueden ser utilizados en rutas con vistas
         *       no en rutas con funciones anonimas.
         */

        if (is_array($routeContent)) {
            if ($appName == null) {
                $appName = $routeContent['app'];
            }

            // Primero se verifica que la aplicacion este agregada en la configuracion
            $app = App::getInstance();
            if ($app->exists($appName)) {
                $app->load($appName);

                // Cargo el autoload.php, archivo opcional
                $autoloadPath = APPS_ROOT . DS . 'autoload.php';

                if (Storage::exists($autoloadPath)) {
                    include_once $autoloadPath;
                }

                // Ejecuta los decoradores de la ruta si es que hay
                $middlewares = $routeContent['middlewares'];

                if (!is_null($middlewares)) {
                    foreach ($middlewares as $middleware) {
                        $returnValue = $app->getMiddleware($middleware);

                        // Valida si el decorador retorna un Response
                        if ($returnValue instanceof \ForeverPHP\Http\ResponseInterface) {
                            $app->run($returnValue);
                        }
                    }
                }

                $app->run($routeContent);
            } else {
                throw new AppException("La aplicación ($appName) a la que pertenece la vista no esta " .
                    "cargada en settings.php.");
            }
        } elseif (is_callable($routeContent)) {
            $this->runFunction($routeContent);
        } else {
            $this->notView();
        }
    }
Ejecuta la ruta solicitada