我正在尝试动态模块配置。想象一下,您有一个表格,其中包含有关要使用的设计的信息。我需要能够从此表中注入结果,以便我可以动态指定视图文件的路径。
结构:
的index.php
模块
--application
----配置
------ module.config.php
--Album
- 更多....
设计
--blue
----布局
----意见
------应用
------专辑
--default
我需要能够处理数据库以便使用最新的设计,然后在module.config.php中使用它,以便模板路径可以使用设计文件夹。
这样的事情:
'template_map' => array(
'layout/layout' => __DIR__ . '/../../../design/'.THEME.'/layouts/layout.phtml',
'application/index/index' => __DIR__ . '/../../../design/'.THEME.'/views/application/index/index.phtml',
),
'template_path_stack' => array(
__DIR__ . '/../../../design/'.THEME.'/views',
),
但是如果我在模块引导程序中使用下面的
$eventManager->attach('bootstrap', array($this, 'loadThemingConfig'), 100);
加载配置文件后会执行。
我如何实现我的需要?
答案 0 :(得分:3)
我建议使用默认主题路径保留配置,如下所示:
'template_map' => array(
'layout/layout' => __DIR__ . '/../../../design/default/layouts/layout.phtml',
'application/index/index' => __DIR__ . '/../../../design/default/views/application/index/index.phtml',
),
'template_path_stack' => array(
__DIR__ . '/../../../design/default/views',
),
并在运行时更改它,您可以在MVC渲染事件中执行此操作,例如在Module类中:
use Zend\Mvc\MvcEvent;
use Zend\View\Resolver\TemplateMapResolver;
use Zend\View\Resolver\TemplatePathStack;
public function onBootstrap(MvcEvent $e)
{
$eventManager->attach(MvcEvent::EVENT_RENDER, function(MvcEvent $event) {
$sm = $event->getParam('application')->getServiceManager();
/** @var TemplateMapResolver $viewResolverMap */
$viewResolverMap = $sm->get('ViewTemplateMapResolver');
// modify template map
/** @var TemplatePathStack $viewResolverPathStack */
$viewResolverPathStack = $sm->get('ViewTemplatePathStack');
// modify path stack
}, 10);
}