I am using EdpModuleLayouts to use one layout to mobile version of my zf2 webapp and another to the "desktop" version.
The configuration in module.config.php in Application module:
...'view_manager' => array(
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => array(
'module_layouts' => array(
'Application' => 'layout/application',
'User' => 'layout/user',
),
'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
),
'template_path_stack' => array(
__DIR__ . '/../view',
),
),
Module.php of the Application module it's like this:
public function onBootstrap(MvcEvent $e)
{
$e->getApplication()->getServiceManager()->get('translator');
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$e->getApplication()->getEventManager()->getSharedManager()
->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) {
$controller = $e->getTarget();
$controllerClass = get_class($controller);
$moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\'));
$config = $e->getApplication()->getServiceManager()->get('config');
if (isset($config['module_layouts'][$moduleNamespace])) {
$controller->layout($config['module_layouts'][$moduleNamespace]);
echo $config['module_layouts'][$moduleNamespace];
}
}, 100);
}
Finally, I have one layout in Application module and another in User module. At this moment every time render the layout in the User Model, even though I enter the Application url.
I stucked on this, I appreciate some help.
Update your module.config.php
now in module.php write following lines
now create a folder layout in module's view directory and create a file with name layout.phtml and put your layout code there.
I am also using EdpModuleLayouts for my multi-layout project. I think, you need to move module_layouts from module.config.php to autoload/global.php file.
This is my Module.php of the Application module :
This is my config\autoload\global.php :
it works for me and hope it helps you.
My solution:
In the plugin :
to get module name, that's first directory name of your controller, in my app at least.
Adjust you module.config.php
Works for me.
The following works for me.
The main idea is to naming the layout a different identifier rather than using a common name like 'layout/layout'. In this way when the the config will be starting to merging, it will not get lost on the way.
If I have a module name Album then I will have the following.
Notice that this is a little bit different compare to EdpModuleLayouts. And module.config.php I have the following relevant configuration.
And that should be working.Hope this helps :)