Sto utilizzando EdpModuleLayouts per utilizzare un layout per la versione mobile della mia webapp zf2 e un altro per la versione "desktop".Utilizzare layout diversi per moduli diversi zend framework 2
La configurazione in module.config.php nel modulo di applicazione:
...'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 del modulo applicativo è come questo:
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);
}
Infine, ho un layout nel modulo Application e un altro nel modulo Utente. In questo momento, ogni volta, si esegue il rendering del layout nel Modello utente, anche se si accede all'URL dell'applicazione.
Mi sono schiacciato, ho apprezzato un po 'di aiuto.
Perché stai duplicando il codice? Stai usando il suo modulo o solo il codice del suo modulo? Inoltre c'è un errore nella tua configurazione il 'module_layouts 'dovrebbe essere una voce di primo livello. Controlla un paio di altri thread su questo argomento, c'è come 10-20 di esso;) – Sam