Zend Framework 2,动态模块配置

时间:2013-12-16 22:37:58

标签: dynamic configuration module zend-framework2

我正在尝试动态模块配置。想象一下,您有一个表格,其中包含有关要使用的设计的信息。我需要能够从此表中注入结果,以便我可以动态指定视图文件的路径。

结构:

的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); 

加载配置文件后会执行。

我如何实现我的需要?

1 个答案:

答案 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);
}