[Zend Framework 2] – Remover módulo do URL

Quando você instala o ZF2 automaticamente você terá o módulo Application definido por padrão, e se você desejar requisitar os URLs, por exemplo:

http://site.com/index/index
http://site.com/index

Você vai dar com os burros n’água, pois por padrão ele vem configurado para rodar a rota para home a partir do módulo Application, e quaisquer outras chamadas para o controlador e as ações retornarão a página de erro 404. É preciso modificar as configurações da rota home.

Uma das necessidades mais básicas de quem começa a trabalhar com o ZF2 é entender como funciona o sistema de configurações de rotas.

Diferentemente do que tínhamos no ZF1, hoje o ZF2 retorna um array através do arquivo config/module.config.php e a princípio pode parecer meio confuso, mas com a prática ele vai ficando mais óbvio e fácil.

Neste arquivo informamos ao Zend como ele deverá se comportar quando um URL é requisitado e qual módulo/controlador/ação deverá chamar.

Bom, o interesse é demonstrar como remover o módulo da URL e não me prenderei aos detalhes de como funciona o sistema de rotas.

No arquivo atual temos:

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

Troque por:

'home' => array(
    'type' => 'Zend\Mvc\Router\Http\Literal',
    'options' => array(
        'route'    => '/',
        'defaults' => array(
            'controller' => 'Application\Controller\Index',
            'action'     => 'index',
        ),
    ),
    'may_terminate' => true,
    'child_routes' => array(
        'default' => array(
            'type' => 'Segment',
            'options' => array(
                'route' => '[:controller[/:action]]',
                'constraints' => array(
                    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'action' => '[a-zA-Z][a-zA-Z0-9_-]*'
                ),
                'defaults' => array(
                    'action' => 'index',
                    '__NAMESPACE__' => 'Application\Controller'
                )
            )
        )
    )
),

E tudo voltará a funcionar como desejado.

OBS.: Você poderá utilizar qualquer módulo. 

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *