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.
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
Precisamos instalar o pacote via composer.
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
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
Ciroute($arquivoDeRotas, $pastaCache, $pastaRotas)
- Endereço completo onde está o arquivo de rotas padrão
- Endereço completo onde está a pasta de cache padrão
- Endereço completo onde vai ficar a pasta de arquivo de rotas do Ciroute
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
- /application/routes/site.php
- /application/routes/admin.php
- /application/routes/api.php
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.
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;
$route["hello-world"]["GET"] = ["Hello_word");
Os métodos de criação de rotas aceitam dois parametros.
Route::get($rota, $controler_metodo)]```
- Rota
- Controler o metodo do mesmo
Básicamente você pode escrever os dois argurmento como escreveria no sistema padrão de rotas do CodeIgniter
Existe diversos métodos na classe Route para criação de rotas, cada um criar com um verbo HTTP diferente
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
$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);
}