Wallogit.com
2017 © Pedro Peláez
CodeIgniter Route System
O Ciroute é simples, ele apenas oferece uma interface Orientada a Objetos, mais organizada e amigável para criação de Rotas para o ambiente de desenvolvimento. Em produção será usada as rodas normais do Codeigniter, pois o mesmo converte todas as rotas, e as gravas no arquivo padrão de rotas., (*1)
AVISO! Quando estiver usando Ciroute não pode mais escrever no arquivo padrão de rotas, pois o mesmo será sobrescrito todas as vezes que for executado em ambiente de desenvolvimento, (*2)
Precisamos instalar o pacote via composer., (*3)
composer require dsisconeto/ciroute
No arquivo index.php do seu projeto, vamos instancia Ciroute em ambiente de desenvolvimento e apenas no mesmo. no final do arquivo antes do require do Codeigniter adicione o seguinte código, (*4)
if (ENVIRONMENT == 'development') {
require_once(__DIR__.'/vendor/autoload.php');
new \DSisconeto\Ciroute\Ciroute(
__DIR__."/application/config/routes.php",
__DIR__."/application/cache/",
__DIR__."/application/routes/"
);
}
A classe Ciroute tem três parâmetros, (*5)
Ciroute($arquivoDeRotas, $pastaCache, $pastaRotas), (*6)
Precisamos criar a pasta onde ficará os arquivos de rotas, que é o terceiro parâmetro da classe Ciroute, no código acima foi passado a pasta /apliication/routes/, agora basta criar quantos arquivos de rotas você quiser dentro, os nomes dos arquivos são de sua escolha. Exemplo, (*7)
Agora vamos usar a classe Route para criar nossas Rotas, dentro de qualquer arquivo rotas que esteja dentro da pasta de que definimos. Para facilitar o acesso a classe de um "use" na classe Route no começo do seu arquivo de rotas., (*8)
use DSisconeto\Ciroute\Route;
Route::get('hello-world', 'Hello_word/index');
O código vai gerar a seguinte saida no arquivo de rotas padrão;, (*9)
$route["hello-world"]["GET"] = ["Hello_word");
Os métodos de criação de rotas aceitam dois parametros., (*10)
Route::get($rota, $controler_metodo)]```
Básicamente você pode escrever os dois argurmento como escreveria no sistema padrão de rotas do CodeIgniter, (*11)
Existe diversos métodos na classe Route para criação de rotas, cada um criar com um verbo HTTP diferente, (*12)
Route::get('eventos/cadastrar', 'create');
Route::post('eventos/cadastrar', 'store');
Route::get('eventos/:num/editar', 'edit/$1');
Route::put('eventos/:num/editar', 'update/$1');
Route::delete('eventos/:num', 'delete/$1');
a saida no arquivo padrão de rotas, (*13)
$route["eventos/cadastrar"]["GET"]="eventos/create"; $route["eventos/cadastrar"]["POST"]="eventos/store"; $route["eventos/:num/editar"]["GET"]="eventos/edit/$1"; $route["eventos/:num/editar"]["PUT"]="eventos/update/$1"; $route["eventos/:num"]["DELETE"]="eventos/delete/$1";
function ciroute($name, $arguments = [])
{
static $routes;
static $regex = "/\(:([A-Za-z0-9_.-]*)\)/";
if (!$routes) $routes = include(__DIR__ . "/../cache/ciroute_names.php");
if (!isset($routes[$name])) {
throw new \Exception("Não existe o nome($name) dessa rota");
}
if (!is_array($arguments)) {
throw new \Exception("O segundo argumento tem que ser um array");
}
$count = 0;
$route = preg_replace_callback($regex, function () use (&$count, $arguments) {
return ($arguments[$count++]);
}, $routes[$name]);
return base_url($route);
}