/**
  * Define os parâmetros do mecanismo MVC
  * @return object Retorna o objeto com as propriedades definidas
  */
 public function initialize($baseURI, $controller_directory)
 {
     if (!empty($baseURI) && !empty($controller_directory)) {
         $explode = array_values(array_filter(explode('/', $_SERVER['REQUEST_URI'])));
         if (isset($explode[0]) && $explode[0] == str_replace('/', '', $baseURI)) {
             unset($explode[0]);
             $explode = array_values($explode);
         }
         if (count($explode) == 0) {
             return $this;
         }
         if (file_exists($controller_directory . $explode[0])) {
             $this->subfolder = $explode[0] . DS;
             if (isset($explode[1])) {
                 $this->controller = Tools::filteredName($explode[1]) . 'Controller';
             }
             if (isset($explode[2])) {
                 $this->action = lcfirst(Tools::filteredName($explode[2])) . 'Action';
                 unset($explode[2]);
             }
         } elseif (count($explode) == 1) {
             $this->controller = Tools::filteredName($explode[0]) . 'Controller';
             return $this;
         } else {
             $this->controller = Tools::filteredName($explode[0]) . 'Controller';
             $this->action = lcfirst(Tools::filteredName($explode[1])) . 'Action';
         }
         unset($explode[0], $explode[1]);
         $this->params = array_values($explode);
     }
 }
 public function loadModules($obj)
 {
     foreach ($this->modules as $module) {
         $module_class = Tools::filteredName(ucwords($module));
         $object = 'HXPHP\\System\\Configs\\Modules\\' . $module_class;
         if (!class_exists($object)) {
             throw new \Exception("O modulo <'{$object}'> informado nao existe.", 1);
         } else {
             $obj->{$module} = new $object();
         }
     }
     return $obj;
 }
 public function add($environment = null)
 {
     if ($environment == null) {
         $environment = $this->defaultEnvironment;
     }
     $name = strtolower(Tools::filteredName($environment));
     $object = 'HXPHP\\System\\Configs\\Environments\\Environment' . ucfirst(Tools::filteredName($environment));
     if (!class_exists($object)) {
         throw new \Exception('O ambiente informado nao esta definido nas configuracoes do sistema.');
     } else {
         $this->{$name} = new $object();
         return $this->{$name};
     }
 }
 /**
  * Define os parâmetros do mecanismo MVC
  * @return object Retorna o objeto com as propriedades definidas
  */
 public function initialize($baseURI)
 {
     if (!empty($baseURI)) {
         $explode = array_values(array_filter(explode('/', $_SERVER['REQUEST_URI'])));
         if (isset($explode[0]) && $explode[0] == str_replace('/', '', $baseURI)) {
             unset($explode[0]);
             $explode = array_values($explode);
         }
         if (count($explode) == 0) {
             $this->controller = 'IndexController';
             $this->action = 'indexAction';
             return $this;
         }
         if (count($explode) == 1) {
             $this->controller = Tools::filteredName($explode[0]) . 'Controller';
             $this->action = 'indexAction';
             return $this;
         }
         $this->controller = Tools::filteredName($explode[0]) . 'Controller';
         $this->action = lcfirst(Tools::filteredName($explode[1])) . 'Action';
         unset($explode[0], $explode[1]);
         $this->params = array_values($explode);
     }
 }
 /**
  * Carrega serviços, módulos e helpers
  * @param  string $object Nome da classe
  * @param  string|array  $params Parâmetros do método construtor
  * @return object         Objeto injetado
  */
 public function load()
 {
     $total_args = func_num_args();
     if (!$total_args) {
         throw new \Exception("Nenhum objeto foi definido para ser carregado.", 1);
     }
     /**
      * Retorna todos os argumentos e define o primeiro como
      * o objeto que será injetado
      * @var array
      */
     $args = func_get_args();
     $object = $args[0];
     /**
      * Define os demais argumentos passados como
      * parâmetros para o construtor do objeto injetado
      */
     unset($args[0]);
     $params = !$args ? [] : array_values($args);
     /**
      * Tratamento que adiciona a pasta do módulo
      */
     $explode = explode('\\', $object);
     $object = $object . '\\' . end($explode);
     $object = 'HXPHP\\System\\' . $object;
     if (class_exists($object)) {
         $name = end($explode);
         $name = strtolower(Tools::filteredName($name));
         if ($params) {
             $ref = new \ReflectionClass($object);
             $this->view->{$name} = $ref->newInstanceArgs($params);
         } else {
             $this->view->{$name} = new $object();
         }
         return $this->view->{$name};
     }
 }