2013-01-21 67 views
3

我有一個需要動態創建的菜單(某些博客頁面是從數據庫添加的)。 ZF2 Dynamic Menu with Zend\Navigation\Navigation解決了如何爲單獨的控制器/操作執行此操作。ZF2,在模塊啓動時創建動態菜單

但是,在初始化模塊的時刻,應如何處理所有請求?

我至少需要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

正確的地方確實是bootstrap做這種事情。請記住,bootstrap中的代碼會在每個請求中運行,因此儘可能使其儘可能輕量級。如果要注入導航,請嘗試緩存數據庫中的導航結構,並從緩存中注入版本。

此行爲是我在ensemble中所做的。它從數據庫中提取數據以動態地建立路線並基於路線建立導航結構。路由和導航分別注入到路由器和導航容器中,因此在調度應用程序時似乎沒有什麼區別於在module.config.php中配置路由的「正常」請求。

對於某些示例,您應該查看kernel,目前僅適用於Doctrine適配器(即將推出Zend \ Db)。它將註冊監聽器註冊爲早期連接,它將數據庫結果分析爲路由和導航結構,並可緩存這些結果以提高性能。

如果您需要更具體的信息,請更新您的問題,以更多地瞭解您在較大圖片中錯過的內容。