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!
Uma resposta em “[Zend Framework 2] – Definir layout no arquivo Module.php”
Olá Gilberto admiro muito seu blog, foi com ele que apreendi Zend 1, agora estou migrando para o Zend 2 estou tento algumas dificuldade e alguma delas é essa de mudança de layout para um módulo especifico.
Não sei mas acho que seria interessante colocar a para de configuração no module.config.php pois estou confuso.