ZF2,在模块启动时创建动态菜单

时间:2013-01-21 10:04:44

标签: events navigation url-routing zend-framework2

我有一个动态创建的菜单(一些博客页面是从数据库中添加的)。 ZF2 Dynamic Menu with Zend\Navigation\Navigation解决了如何为单个控制器/操作执行此操作。

但是,在初始化模块时,应该如何对所有请求进行此操作?

我至少需要routeMatch对象(获取语言参数),我已经看到了下面的内容:

    public function onBootstrap(EventInterface $e) 
    { 
        $app = $e->getApplication(); 
        $em  = $app->getEventManager(); 

        $em->attach(MvcEvent::EVENT_ROUTE, function($e) { 
            $routeMatch = $e->getRouteMatch();
        }); 
    }

但是在文档中它说:

“onBootstrap()方法在每个页面请求上为每个实现此功能的模块调用,并且只应用于执行轻量级任务,例如注册事件侦听器。”

在Zend Framework 2中初始化动态导航(或其他更复杂的逻辑)的最佳位置和方法是什么?

1 个答案:

答案 0 :(得分:1)

正确的地方确实是引导来做这类事情。请记住,bootstrap中的代码是在每个请求中运行的,因此请尽可能使其轻量级。如果要注入导航,请尝试从数据库缓存导航结构并从缓存中注入版本。

这种行为是我在ensemble中所做的。它从数据库中获取数据以动态构建路由,并根据路由构建导航结构。路由和导航分别注入路由器和导航容器,因此在发送应用程序时似乎没有什么不同于在module.config.php中配置路由的“正常”请求。

对于某些示例,您应该查看kernel,目前只能使用Doctrine适配器(Zend \ Db即将推出)。它将侦听器注册为早期挂钩,它将数据库结果解析为路由和导航结构,并且可以缓存这些结果以提高性能。

如果您需要更具体的信息,请更新您的问题,以便更详细地了解您错过的内容。