Archive for 'Configurações'

Configuração de rotas (routes) no CodeIgniter

Posted on julho 13, 2010, under Configurações, Passos Iniciais.

Rotas (routes) no CodeIgniter: configuração

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).

Este é um guest post de Julio Bitencourt, que pode ser encontrado na internet através de:

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";
Rotas são executados na ordem em que são definidas. Rotas “superiores” sempre prevalecem sobre rotas “inferiores”.

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:

  1. :num. O wildcard “:num”, utilizado para rotear somente números.
  2. :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!