6. Rotas

Rotas

O que são rotas?

Por padrão o sistema utiliza a lógica modulo/controlador/acao na URL para saber que arquivo e método acessar e executar. Isso faz com que suas URL's nem sempre se pareçam como você acredita que seja a melhor forma. As rotas mascaram a URL para fazer o sistema acessar um determinado módulo -> controlador -> acao sem a necessidade de indicar um por um na URL.

Ex.: * Você acessa a URL: http://seusite.com.br/admin/cadastro-de-usuario.html * O sistema executa: * módulo: Admin * controlador: UsuarioController * método: cadastroAction()

Pela Genki Dama de Goku, como isso é possível?

Para cada módulo é necessário um arquivo específico de rotas. Então primeiro você deve criar um arquivo dentro da pasta config da seguinte forma: nome-do-modulo.routes.php

admin.routes.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php
return array(
    'cadastro-de-usuario.html' => array(

        // Nâo é necessário adicionar o parâmetro para o módulo,
        // pois este arquivo é específico para o módulo admin, ;)
        'controller' => 'usuario',
        'action' => 'cadastro',

        // Um parâmetro que é passado pela URL e seu valor padrão
        'params' => array('from' => 'direct'),
    ),
    'meu-perfil.html' => array(
        'controller' => 'perfil',
        'action' => 'index',
    ),
);

Parâmetros

Quando existem rotas os parâmetros devem ser passados no final da URL, aquelas que foram pré definidas não levam nome=valor (ou mesmo nome/valor). No exemplo acima uma forma de mudar o valor padrão (direct) para facebook deveria ser feito da seguinte forma:

1
http://seusite.com.br/admin/cadastro-de-usuario.html/facebook

Ao mesmo tempo é possível utilizar Query Strings o que deixaria a URL mais ou menos assim:

1
http://seusite.com.br/admin/cadastro-de-usuario.html/facebook?ativo=sim

Você quer que a rota fique no final da URL? Abaixo iremos ver um pouco sobre rotas reversas ;)

Rotas Reversas

Aqui em nossos exemplos estamos utilizando a extensão .html para exemplificar as rotas, mas isso não é de fato necessário. Porém é uma prática bastante usada e é algo meio esquisito ter o .html e logo após uma barra com um parâmetro, por isso nós também criamos as rotas reversas que deixam os parâmetros antes do nome da rota na URL.

Para isso é necessário informar que esta rota é reversa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
'cadastro-de-usuario.html' => array(

    // Nâo é necessário adicionar o parâmetro para o módulo,
    // pois este arquivo é específico para o módulo admin, ;)
    'controller' => 'usuario',
    'action' => 'cadastro',

    // Aqui indicamos que a rota é reversa
    'type' => \SuitUp\Routes\Routes::TYPE_REVERSE,

    // Um parâmetro que é passado pela URL e seu valor padrão
    'params' => array('from' => 'direct'),
),

O mesmo exemplo citado acima, mas com rotas reversas ficaria da seguinte forma:

1
2
3
http://seusite.com.br/admin/facebook/cadastro-de-usuario.html
ou seja
http://seusite.com.br/modulo/parametro/rota

Ao mesmo tempo é possível utilizar Query Strings o que deixaria a URL mais ou menos assim:

1
http://seusite.com.br/admin/facebook/cadastro-de-usuario.html?ativo=sim

No controlador

Você pode capturar os parâmetros dentro do controlador da seguinte forma:

1
$this->getParams();

Em qualquer lugar

É possível recuperar a instância de Routes de qualquer lugar fazendo:

1
2
// Esta classe funciona com Design Pattern Singleton
\SuitUp\Routes\Routes::getInstance();