Archive for 'Configurações'
Configuração de rotas (routes) no CodeIgniter
Posted on julho 13, 2010, under Configurações, Passos Iniciais.

O relacionamento padrão entre uma URL e um Controller no CodeIgniter segue a estrutura exemplo.com/classe/metodo/id/ (como mostrado no artigo sobre Controllers no CodeIgniter), mas, às vezes, é preciso “remapear” este relacionamento. No CodeIgniter, isso é feito através de routes (rotas).
Tomemos como exemplo a visualização de produtos em uma loja virtual. Digamos que a página para visualização dos detalhes de uma cadeira de balanço seja acessada através da URL minhaloja.com/produtos/detalhes/1/2 onde “produtos” é nosso controller; “detalhes” é a função que exibe os detalhes do produto; “1″ seja o código da categoria cadeiras; e “2″ seja o código de nossa cadeira de balanço. Esta estrutura funciona perfeitamente, mas, convenhamos, não é “elegante”.
Configuração de rotas
A configuração de rotas é feita através do arquivo /application/config/routes.php, na instalação padrão do CodeIgniter. Alguns exemplos de configuração de routes:
1 2 3 4 5 6 | // "minhaloja.com/fale-conosco" vai direcionar para o controller "contato" $route['fale-conosco'] = "contato"; // "minhaloja.com/fale-conosco" vai direcionar para o controller "cadastros" // utilizando a função "novo_cliente" $route['cadastro/clientes'] = "cadastros/novo_cliente"; |
Wildcards ou Curingas
Você pode usar curingas (wildcards) para configurar rotas. Desta forma, é possível deixar as URLs mais dinâmicas. Existem 2 tipos de wildcards:
- :num. O wildcard “:num”, utilizado para rotear somente números.
- :any. O curinga “:any”, utilizado para rotear qualquer caractere.
Voltando ao exemplo anterior, que tal transformar a URL “minhaloja.com/produtos/detalhes/1/2″ em “minhaloja.com/1/2/”? Seguindo a estrutura padrão do CodeIgniter, pressupõe-se que se está chamando o controller “1″ e, dentro do controller, a função “2″, o que não existe na prática.
Para resolver o problema, vamos escrever a seguinte rota:
1 | $route[':num/:num'] = "produtos/detalhes"; |
Dessa forma, haverá direcionamento para “produtos/detalhes” sempre que os seguimentos 1 e 2 da URL sejam numéricos.
Exemplo da função detalhes dentro do controller “produtos”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Produtos extends Controller { function Produtos() { parent::Controller(); } function index() { // Função index é acessada quando não for passada nenhuma função para o controller } function detalhes() { echo $this->uri->segment(1); // retorna o código da categoria echo $this->uri->segment(2); // retorna o código do produto } } |
Rotas com expressões regulares
É possível utilizar expressões regulares para definir as rotas no CodeIgniter. Vamos reescrever a rota do nosso exemplo:
1 | $route['(:num)/(:num)'] = "produtos/detalhes/$1/$2"; |
Agora, o controller fica assim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Produtos extends Controller { function Produtos() { parent::Controller(); } function index() { // Função index é acessada quando não for passada nenhuma função para o controller } function detalhes($id_categoria, $id_produto) { echo $id_categoria; // retorna o código da categoria echo $id_produto; // retorna o código do produto } } |
Rotas e SEO
A URL minhaloja.com/1/2/ ficou bem mais curta e elegante, mas não é amigável quando vamos falar de SEO. É muito melhor ter uma estrutura como:
http://minhaloja.com/cadeiras/cadeira-de-balanco/
Esta URL é “amigável” para os motores de busca e, se você tiver, por exemplo, um campo no cadastro de produtos da loja para armazenar o nome da categoria e uma “descrição de URL” (slug) do produto – como “cadeira-de-balanco” -, fica muito fácil. Essa técnica é comumente chamada de URLs amigáveis.
A regra do exemplo é:
1 | $route['(:any)/(:any)'] = "produtos/detalhes/$1/$2"; |
O controller permanece inalterado; só é preciso buscar no banco de dados os produtos com base nos slugs de categoria e produto – caso não saiba como criar slugs, confira o artigo “URLs amigáveis (slug) à WordPress“, do blog desenvolvimento para web.
Rotas reservadas
Existem dois wildcards reservados no CodeIgniter: “welcome” e “scaffolding”. Ou seja, você não poderá utilizar as seguintes rotas em seus projetos:
1 | $route['default_controller'] = 'welcome'; |
E
1 | $route['scaffolding_trigger'] = 'scaffolding'; |
Conclusão
Rotas servem para alterar o relacionamento padrão entre uma URL e um Controller no CodeIgniter. Sabendo utilizar bem os tipos de rotas disponíveis, é possível criar estruturas incríveis, que realmente facilitam o desenvolvimento e acesso a controllers e funções – e o SEO agradece!
Com estas dicas já é possível configurar suas rotas e melhorar a navegação em seus projetos com CodeIgniter.
Espero que tenham gostado deste meu primeiro artigo no CodeIgniter Brasil e fiquem ligados para mais novidades!
