2015-12-17 74 views
0

我使用位於config/autoload的全局文件在Zend Framework 2中做了一個導航。我怎麼能在這個全局文件中獲取路由參數?Zend Framework 2:動態導航和麪包屑

我已經試過這樣:

$helper = new Zend\View\Helper\ServerUrl(); 
$active_url = $helper->getHost(); 

但這返回整個URL。 對於exemle我有這樣

www.mysite.com/controller/action/id/3 

我需要知道ID的URL。

我的全局文件返回導航鍵,看起來像這樣:

return array(
    'navigation' => array(
     'default' => array(
      array(
       'label'  => 'Home', 
       'route'  => 'admin', 
       'active'  => true, 
       'resource' => 'Admin\Controller\Index', 
       'privilege' => 'index', 
       'pages'  => array(
        'label' => 'My posts ', 
        'route' => 'admin/default', 
        'params' => array(
         'controller' => 'posts', 
         'action' => 'edit' 
        ), 
        'resource' => 'Admin\Controller\Posts', 
        'privilege' => 'edit', 
       ), 
      ) 
     ) 
    ) 
); 

這一切都做工精細,只要路線不包含參數。如果我的網址包含一個ID參數,我的菜單鏈接和麪包屑就與控制器和沒有ID的動作形式相同。

因此,而不是:

www.mysite.com/posts/edit/id/12 

我的鏈接看起來像:

www.mysite.com/posts/edit 
+0

你爲什麼想這樣做? 'config/autoload'文件夾中的全局文件和本地文件只能用於聲明常量,而不能用於動態內容。如果你這樣做,你會遇到麻煩。如果不添加更多關於您想要實現的功能的詳細信息,則很難提供替代解決方案... – Wilt

+0

配置在路由發生前加載。你無法做到這一點。 –

+0

@Will我編輯了我的帖子。 – Andreea

回答

1

你要找的是動態的麪包屑。綁定麪包屑來傳遞參數並不常見,但您可以通過回答here on stackoverflow找到問題。

同樣寫在the documentation here之中,因爲ZF2版本2.2.0的'useRouteMatch'標誌可以設置爲true

從版本2.2.0開始,如果您想在生成鏈接時重新使用任何匹配的路由參數,可以通過「useRouteMatch」標誌來實現。創建包含當前所選語言或區域設置的分段路線作爲初始分段時尤其有用,因爲它可確保生成的鏈接全部包含匹配的值。

不用手動通過你的params arary導航器將使用paramsRouteMatch。因此,你將有你的ID也可用。

array(
    'label' => 'My posts', 
    'route' => 'admin/default', 
    'useRouteMatch' => true 
), 

注意你說你在一個global文件中autoload/config文件夾中定義您的導航。如here in this tutorial所示,在module.config.php中實施導航會更好。