Code Igniter User Guide Version 1.5.2


Roteamento URI

Tipicamente há uma relação um-a-um entre a string URL e seu correspondente controller classe/método. Os segmentos em um URI normalmente seguem este padrão:

www.seu-site.com/classe/funcao/id/

Em alguns momentos, porém, você pode querer remapear estar relação para que uma classe/função diferente possa ser chamada no lugar daquela correspondente à URL.

Por exemplo, vamos dizer que você queria suas URLs tenham este protótipo:

www.seu-site.com/produto/1/
www.seu-site.com/produto/2/
www.seu-site.com/produto/3/
www.seu-site.com/produto/4/

Normalmente o segundo segmento da URL está reservado para o nome da função, mas no exemplo acima há um ID de produto no lugar. Para resolver isto, o Code Igniter permite que você remapeie o handler URI.

Configurando suas próprias regras de roteamento

Regras de roteamento são definidas em seu arquivo application/config/routes.php. Nele, você verá uma array chamada $route que permite que você espeficique seus próprios critérios. As rotas podem tanto ser espeficicadas usando caracteres coringa (wildcards) como Expressões Regulares.

Caractere Coringa - Wildcards

Uma típica rota coringa se parece com esta:

$route['produto/:num'] = "catalogo/produto_busca";

Numa rota, a chace da array contém o URI a ser igualado, enquanto que o valor da arry contém o destino para qual ele deverá ser encaminhado, a nova rota. No exemplo acima, se a palavra literam "produto" for encontrada no primeiro segmento da URL, e um número for encontrado no segundo segmento, a classe "catalogo" e o método "produto_busca" serão utilizados no lugar.

Você pode igualar valores literais ou então usar dois tipos de coringas:

:num
:qualquer

:num irá igualar um segmento contendo apenas números.
:qualquer irá igualar um segmento contendo qualquer caracter.

Note: As rotas serão executadas na ordem em que forem definidas. Rotas de nível mais alto sempre terão precedência às de nível mais baixo.

Exemplos

Aqui vão alguns exemplo de roteamento:

$route['journals'] = "blogs";

Qualquer URL contendo a palavra "jornauls" no primeiro segmento irá ser remapeada à classe "blogs".

$route['blog/joe'] = "blogs/users/34";

Qualquer URL contendo o segmento blog/joe será remapeada à classe "blogs" e ao método "users". O ID será 'setado' como "34".

$route['produto/:qualquer'] = "catalogo/produto_busca";

Qualquer URL contendo "produto" como primeiro segmento, e nada no segundo, será remapeada à classe "catalogo" e ao método "produto_busca".

Importante: Não use barras invertidas ou normais.

Expressões Regulares

Se você preferir, pode usar expressões regulares para definir suas regras de rotas. Qualquer expressão regular válida é permitida, assim como back-references.

Note:  Se você usar back-references, deve usar a sintaxe com o sinal de dolar ($) no lugar da de dupla barra invertida (//).

Uma típica rota RegEx se parece com algo assim:

$route['produtos/([a-z]+)/(\d+)'] = "$1/id_$2";

No exemplo acima, um URI similar a produtos/camisas/123 iria chamar a classe controller camisas e a função id_123.

Você pode também misturar coringas com expressões regulares.

Rotas Reservadas

Há duas rotas reservadas:

$route['default_controller'] = 'bem-vindo';

Esta rota indica qual classe controle deverá ser chamada se o URI não contiver dados, o que seria o caso quando alguém carrega a URL raiz. No exemplo cima, a classe "bem-vindo" seria carregada. Você é encorajado a sempre ter uma rota default, do contrário uma página 404 irá aparecer como default.

$route['scaffolding_trigger'] = 'scaffolding';

Esta rota permite que você configure a palavra secreta, que quando presente na URL, dispara o recurso de scaffolding. Por favor, leia a página Scaffolding para detalhes.