使用请求参数在Module类的template_map内部动态更改视图脚本路径

时间:2018-12-22 05:24:15

标签: zend-framework zend-framework3

我正在尝试更改view_manager template map

当前,我的Zend Framework 3 Application.中有一个自定义模板目录,它基于以下路径:

/path/to/designfolder/application/index/index.phtml

代替通常的模块化方法,例如:

/path/to/module/Application/view/application/index/index.phtml

我目前在这里植入template_map config settings

namespace Application;

class Module {
   public function onMergeConfig(ModuleEvent $event){
     $templatesData = $this->getTemplatesData();
     $tmpTemplates = [];
     foreach($templatesData as $template){
         // such as $tmpTemplates['application/index/index'] = '/path/to/designfolder/application/index/index.phtml';
         $dbResolve = $this->performDbStuff()
         $tmpTemplates[$template['resource']] = $template['path'];             
     }
     $selConf = ['view_manager' => ['template_map'=>$tmpTemplates,]];
     $config = ArrayUtils::merge($config,$selConf);
     $configListener->setMergedConfig($config);
     $event->setConfigListener($configListener);
     $sm->setAllowOverride(true);
     $sm->setService('Config',$config);
     $sm->setAllowOverride(false);
   }       
}

为说明起见,我将获取在包含资源和模板路径的配置中预先构建的自定义模板映射。然后,我循环浏览并使用此更新版本合并现有视图模板映射。因此,对于我们的示例,application/index/index映射已更新到我的自定义设计模板文件夹。

我遇到的问题是,这是一个预配置,ALSO会对每个条目执行数据库查询。继续手动添加资源不仅烦人,而且当资源变得更大时,添加配置映射并设置所有配置映射将成为性能问题。

我真正想做的只是抓住module,controller,and action并更新该特定模板图的配置。 问题是在onMergeConfig

期间我似乎无法访问模块,控制器和操作

我还尝试将代码添加到MvcEvent::EVENT_DISPATCHMvcEvent::EVENT_RENDER的事件监听器中

我的最终目标是在动态渲染之前更新view_manager template_map配置。

或者可能创建我自己的自定义渲染器,以补充可以在逻辑上处理此问题的解析器?

0 个答案:

没有答案