terça-feira, 7 de julho de 2015

Conceito 1 - Rotas no Zend Framework 2

Na minha opinião o zend framework 2 possui três conceitos básicos para seu uso e aproveitamento. O primeiro conceito são as rotas.

As rotas são as responsáveis em acessar um controller e a action de um módulo e existem vários tipo de rotas, porém vamos nos focar em duas: Literal e Segment. O arquivo de configuração está localizado dentro de cada módulo na pasta config. O arquivo module.config.php é o responsável entre outras funções pela configuração das rotas.

return array(
    'router' => array(
        'routes' => array(
            'home' => array(
                'type' => 'Zend\Mvc\Router\Http\Literal',
                'options' => array(
                    'route'    => '/usuario',
                    'defaults' => array(
                        'controller' => 'Application\Controller\Index',
'action'     => 'index',
),
),
),

Segue abaixo uma explicação básica dos principais pontos da configuração da rota. Esses pontos são utilizados pra qualquer tipo de rota:

router => índice do array onde iremos configurar todas as rotas do módulo.
home => é o nome da rota geralmente usado quando vamos dar um redirect().
type =>  é literalmente o tipo da rota que vamos usar como literal, segment, etc
route => é o modo de como iremos acessar a rota pela url, por exemplo: /usuario. É importante lembrar que /usuario é diferente de /usuario/ para o zend framework 2, então temos que tomar muito cuidado com isso.
controller => é o nome da classe do controller do módulo que iremos instanciar por padrão, caso nenhum outro controller seja passado por parâmetro.
action => é o método do controller que queremos acessar por padrão, caso nenhuma outra action seja passada por parâmetro.

Rota Literal

'type' => 'Zend\Mvc\Router\Http\Literal'

É o tipo de rota mais simples. Ela não aceita parâmetros como por exemplo:


/usuario/alterar/10

Os únicos parâmetros permitidos são o controller (usuario) e a action (alterar).

Exemplo de configuração:

'router' => array(
     'routes' => array(
         'usuario-home' => array(
             'type' => '
Zend\Mvc\Router\Http\Literal',
             'options' => array(
                 'route'    => '/usuario',
                 'defaults' => array(
                     'controller' => 'Usuario\Controller\Usuario',
                     'action'     => 'selectAll',
                 ),
             ),
         )
     )
 )


Rota Segment

'type' => 'Zend\Mvc\Router\Http\Segment'

Talvez seja o tipo de rota mais utilizado, ao contrário da rota Literal, esta rota aceita parâmetros.

Exemplo de configuração:

'router' => array(
     'routes' => array(
         'usuario-edit' => array(
             'type' => 'segment', //também pode chamada assim
             'options' => array(
                 'route'    => '/usuario[/:action[/:id]]',
                 'defaults' => array(
                     'controller' => 'UsuarioController',
                     'action'     => 'edit'
                 ),
                 'constraints' => array(
                    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'id' => '\d+'
                 ),
             ),
         )
     )
 )

route => neste exemplo o único parâmetro obrigatório é o controller. Tanto a action como o id são opcionais.
constraints => é a padronização de cada parâmetro que a rota pode receber.

OBS: O índice controller da rota é a referencia ao índice dos controllers invokables dentro do array controllers.

'controllers' => array(
        'invokables' => array(
            'UsuarioController' => 'Usuario\Controller\UsuarioController'
        ),

    ),

Por boas práticas e para evitar duplicidade no apelido do controller é recomendável que usamos o caminho do controller como apelidos como por exemplo:

Na rota:
'defaults' => array(     'controller' => 'Usuario\Controller\Usuario',

Nos controllers:
'invokables' => array(
     'Usuario\Controller\Usuario' => 'Usuario\Controller\UsuarioController',

Mais informações:

http://framework.zend.com/manual/current/en/in-depth-guide/understanding-routing.html

Nenhum comentário:

Postar um comentário