Динамически изменять путь к скрипту вида внутри template_map в классе Module с параметрами запроса - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь изменить 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 непосредственно перед динамическим рендерингом.

ИЛИ возможно создать мой собственный пользовательский рендер, который дополняетраспознаватель, который мог бы логически обработать это?

...