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); }