Created
November 13, 2014 13:01
-
-
Save klauskpm/26a251eb693f424e959a to your computer and use it in GitHub Desktop.
Classe de Router para CodeIgniter, criado para facilitar o manuseio das rotas e próprio entendimento.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class MY_Router extends CI_Router { | |
private $rotas = array(); // Contem todas as rotas so sistema | |
private $classe; // Classe onde está sendo chamado | |
private $metodo; // Método onde está sendo chamado | |
public function __construct() | |
{ | |
$this->iniciar(); | |
} | |
/** | |
* Função para inicar configuração. | |
* Se um dia for instanciada, não precisa se preocupar em sobreescrever | |
* o __construct(), e a configuração pode ser chamada a qualquer hora. | |
*/ | |
private function iniciar() | |
{ | |
parent::__construct(); | |
$this->configurarRotas(); | |
} | |
/** | |
* Gera a configuração da propriedade $rotas, onde ficam todas as rotas | |
* do sistema, só que, com alguns diferenciais: as chaves e valores foram | |
* invertidos e o "default_controller", substituido por "/". | |
*/ | |
private function configurarRotas() | |
{ | |
// Inclui o arquivo de rotas, para receber o valor delas. | |
if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/routes.php')) | |
{ | |
include(APPPATH.'config/'.ENVIRONMENT.'/routes.php'); | |
} | |
elseif (is_file(APPPATH.'config/routes.php')) | |
{ | |
include(APPPATH.'config/routes.php'); | |
} | |
$rotas = ( ! isset($route) OR ! is_array($route)) ? array() : $route; | |
unset($route); | |
// Troca inverte as chaves, pelos valores e substitui o | |
// "default_controller" por "/" | |
$rotas['/'] = $rotas['default_controller']; | |
unset($rotas['default_controller']); | |
$rotas = array_flip($rotas); | |
// Organiza as rotas em arrays multidimensionais | |
foreach($rotas as $caminho => $rota) { | |
$caminho_metodo = explode('/',$caminho); | |
if(!isset($this->rotas[$caminho_metodo[0]])) { | |
$this->rotas[$caminho_metodo[0]] = array(); | |
} | |
if(isset($caminho_metodo[1])) { | |
$this->rotas[$caminho_metodo[0]][$caminho_metodo[1]] = $rota; | |
} else { | |
array_push($this->rotas[$caminho_metodo[0]], $rota); | |
} | |
} | |
unset($rotas); | |
} | |
/** | |
* Gerado para facilitar a chamada e configurar as propriedades do sistema. | |
* Só deve ser chamado, quando estiver dentro de um método, para | |
* configuração completa. | |
*/ | |
private function configuraPropriedades() | |
{ | |
$this->classe = $this->fetch_class(); | |
$this->metodo = $this->fetch_method(); | |
} | |
/** | |
* Retorna a rota do método em que é encontrado | |
* @return String Rota da atual classe e método | |
*/ | |
public function retornaRotaAtual() | |
{ | |
$this->configuraPropriedades(); | |
return $this->rotas[$this->classe][$this->metodo]; | |
} | |
/** | |
* Retorna a lista de rotas configuradas em /config/routes.php | |
* @param string $classe Nome da classe ao qual quer as rotas | |
* @param string $metodo Nome do método ao qual quer as rotas | |
* @return array|string Retorna a uma rota ou uma lista de rotas | |
*/ | |
public function retornaRotas($classe = null, $metodo = null) | |
{ | |
if(!is_null($classe) && isset($this->rotas[$classe])) { | |
if(!is_null($metodo) && isset($this->rotas[$classe][$metodo])) { | |
return $this->rotas[$classe][$metodo]; | |
} | |
return $this->rotas[$classe]; | |
} | |
return $this->rotas; | |
} | |
/** | |
* Retorna a url completa, da rota desejada | |
* @param string|array $rota Rota completa, ou só a classe | |
* @param string $metodo Método em string | |
* @return string|boolean Retorna a url caso tenha o método e false, caso não | |
*/ | |
public function rotaUrl($rota, $metodo = null) | |
{ | |
if($metodo) { | |
$rota = array($rota, $metodo); | |
} | |
if(!is_array($rota)) { | |
$rota = explode('/', $rota); | |
} | |
if(isset($rota[1])) { | |
return base_url() . $this->rotas[$rota[0]][$rota[1]]; | |
} else { | |
return false; | |
} | |
} | |
/** | |
* Retorna a classe que está instanciada | |
* @return string Classe instanciada | |
*/ | |
public function classe() | |
{ | |
return $this->classe?$this->classe:$this->classe = $this->fetch_class(); | |
} | |
/** | |
* Retorna o método que está instanciado | |
* @return string Método instanciado | |
*/ | |
public function metodo() | |
{ | |
return $this->metodo?$this->metodo:$this->metodo = $this->fetch_method(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment