[Zend Framework 2] – Definir layout no arquivo Module.php

Recentemente, deparei-me com uma necessidade de definir o layout diretamente no arquivo Module.php.

Gostaria de deixar aqui a form autilizada para resolver este problema.

No arquivo de configuração per module (module.config.php) existe um retorno de array.
Este array possui uma chave [‘view_manager’].

Entrando no mérito de seu valor, esta chave faz referência exatamente ao que diz, define valores para o view da aplicação. (Duh)
Ela é utilizada pelo ModuleManager no momento em que os eventos consultam se foi definido um layout em tempo de execução e o dispara.
O Event Manager Utiliado é o MvcEvent e isto é feito quando o ActionController é executado no namespace em uso.

Isto quer dizer que você pode definir um layout por módulo diretamente no Module.php de cada módulo.

O processo pode ser trivial e precisa utilizar de closures.

Para utilizamos o ModuleManager, precisaremos utiliza-la:

Logo após a seção de uses do PHP seguindo o namespace utilizado adicione:

NOTA: Preste atenção que estou utilizando o Módulo padrão Application. Utilize qualquer módulo desejado!

// modules/Application/Module.php

namespace Application;
use Zend\ModuleManager\ModuleManager;

Precisamos criar, caso você ainda não o tenha, o método init() para nossa classe Module.

Não entrarei no mérito deste método agora, mas ele é invocado toda vez que o Module é chamado e permite que você configure diversas utilizades na inicialização.

// modules/Application/Module.php

...
public function init(ModuleManager $manager)
{
    // Obtemos o gerenciador de eventos
    $events = $manager->getEventManager();
    
    // Para obter os eventos compartilhados
    $sharedEvents = $events->getSharedManager();
    
    // Para definir o que precisamos disparar
    // Utilizamos da variavel \Zend\Mvc\MvcEvent $e 
    $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {

        // Quando o controlador for encontrado pelo ActionController
        $controller = $e->getTarget();
       
        // Podemos definir o laytout diretamente para qualquer 
        // que seja o primeiro controller encontrado
        $controller->layout('application/layout/layout');
    }, 100);
}
...

Como você pode ver não é algo tão complicado, mas que exige uma certa ciência.

Infelizmente, o Zend Framework 2 nos obriga a inspecionar um pouco mais o seu funcionamento, mas nos oferece mais flexibilidade recursos.

É isso ai! Abraço do Giba!

Deixe uma resposta

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