Layout 在Zend Framework 2中,如何基于路由覆盖布局?

Layout 在Zend Framework 2中,如何基于路由覆盖布局?,layout,zend-framework2,routes,Layout,Zend Framework2,Routes,目前,我有这个覆盖布局的基础上的模块 public function onBootstrap($e) { $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) { $controller = $e->getT

目前,我有这个覆盖布局的基础上的模块

public function onBootstrap($e)
{
    $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, '\\'));
        if ('Myrobot' === $moduleNamespace ) {
            $controller->layout('layout/myrobot');
        }
    }, 200);
}

我想改变这一点,以便布局基于路由名称而不是模块名称。

好的,您需要在您的代码片段中访问
路由器
,并获得当前匹配的路由名称。然后,您只需在配置中检查该路由名称是否存在模板条目,如果存在,则覆盖它。有了这些信息,您应该能够继续挖掘,因为仅仅复制粘贴
EdpModuleLayouts
并不算作“自己解决问题的有效尝试”;)

您还可以搜索根据管线名称设置布局的模块,例如。在Module.php中,它获取当前匹配的路由。如果路线名称以
admin
开头,则其设置的布局


请注意,您必须检查最后返回的视图模型是否设置为终止。这意味着控制器不想渲染布局,因此不需要设置布局。对于您自己的代码,请记住这一点。

您可以通过事件访问路由匹配,无需使用
路由器(
;)如何从事件中访问路由匹配?是的,MvcEvent有,我的错:)