【问题标题】:ZF2, create dynamic menu at module initiationZF2,在模块启动时创建动态菜单
【发布时间】:2013-01-21 10:04:44
【问题描述】:

我有一个需要动态创建的菜单(一些博客页面是从数据库中添加的)。 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 中初始化动态导航(或其他更复杂的逻辑)的最佳位置和方法是什么?

【问题讨论】:

    标签: events navigation url-routing zend-framework2


    【解决方案1】:

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

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

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

    如果您需要更具体的信息,请更新您的问题,以进一步了解您在大局中遗漏了什么。

    【讨论】:

      猜你喜欢
      • 2015-04-08
      • 1970-01-01
      • 2012-09-13
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      相关资源
      最近更新 更多