Я пытаюсь изменить 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
обновляется в моей папке с шаблонами пользовательских конструкций.
Проблема, с которой я столкнулся, заключается в том, что это предварительно встроенная конфигурация, которая ТАКЖЕ выполняет запрос к базе данных с каждой записью,Это не только раздражает, когда вы продолжаете добавлять ресурсы вручную, но когда оно становится намного больше, это будет проблемой производительности, добавляя сопоставления конфигурации и устанавливая все их.
То, что я хотел бы сделать, это действительнопросто возьмите module,controller,and action
и просто обновите конфигурации для этой конкретной карты шаблона. Проблема в том, что у меня нет доступа к модулю, контроллеру и действиям во время onMergeConfig
Я также попытался добавить код в прослушиватель событий на MvcEvent::EVENT_DISPATCH
иMvcEvent::EVENT_RENDER
Моей конечной целью было бы обновить конфигурацию view_manager template_map
непосредственно перед динамическим рендерингом.
ИЛИ возможно создать мой собственный пользовательский рендер, который дополняетраспознаватель, который мог бы логически обработать это?