我正在尝试更改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_DISPATCH
和MvcEvent::EVENT_RENDER
的事件监听器中
我的最终目标是在动态渲染之前更新view_manager template_map
配置。
或者可能创建我自己的自定义渲染器,以补充可以在逻辑上处理此问题的解析器?