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

标签 events navigation url-routing zend-framework2

我有一个需要动态创建的菜单(一些博客页面是从数据库添加的)。 ZF2 Dynamic Menu with Zend\Navigation\Navigation说明如何为单个 Controller /操作执行此操作。

但是在初始化模块时,对于所有请求应该如何完成呢?

我至少需要 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 中初始化动态导航(或其他更复杂的逻辑)的最佳位置和方法是什么?

最佳答案

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

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

对于一些示例,您应该查看 kernel ,目前仅适用于 Doctrine 适配器(Zend\Db 即将推出)。它注册监听器以尽早连接,它将数据库结果解析为路线和导航结构,并且可以缓存这些结构以提高性能。

如果您需要更具体的信息,请更新您的问题以询问更多关于您在大局中遗漏的内容。

关于events - ZF2,在模块启动时创建动态菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14436252/

相关文章:

asp.net - 当不匹配路由时,OWIN 中的 WebApi 总是返回 200 而不是 404

jQuery - onClick 事件上的颤抖图像

Javascript添加监听器错误: TypeError: trigger. addEventListener不是函数

html - Wordpress 导航子/父

jquery - 每行具有不同背景图像的水平菜单

php - 在 URL 中使用双斜杠有什么缺点吗?

Javascript:调用 body 的 onload 事件中指定的函数的参数是什么?

c# - .NET 中事件签名的代码友好版本

extjs - Sencha Touch 导航 View - 更改标题在后退按钮上不起作用

javascript - React-Router:将 props 传递给 React-Router ^2.0.0 中的嵌套路由组件的最佳方法?