2009-08-27 59 views
0

我使用導航組件進行網站菜單。我也使用let zend從請求參數中找出選定的菜單項 - 我想這是自動完成的。唯一的問題是,爲了這個工作,必須在每個節點的導航配置中指定動作和控制器。這也意味着當zend從路由,動作和控制器信息中生成鏈接並自動附加到生成的鏈接時。Zend_Navigation網址生成問題

任何人都有同樣的問題?

Zend manual section,解釋了Mvc導航頁面的功能。

實施例:

在自舉定義一些路線:

$router->addRoute('user_profile_tab', new Zend_Controller_Router_Route(
      'profil/:user/:location/:tab/*', 
      array(
       'action'  => 'profile', 
       'controller' => 'user', 
       'user'  => ($user ? $user->id : 0), //change later 
       'location'  => 0 //inject appropriate value later 
      ) 
     )); 

導航容器對象:

$container = ..... 
......, 
array(
     'label' => tr('Privileges'), 
     'id' => 'user-profile-perms', 
    'type' => 'Zulu_Navigation_Page', 
    'controller' => 'user', 
    'action' => 'profile', 
    'route'=> 'user_profile_tab', 
     'params' => array('tab'=>Main_Lib_Common::NAVI_USER_TAB_PERMS) 
) 
); 

結果使用

$page = $container->getById('user-profile-perms'); 
$page->href; 

http://www.example.com/profil/1/0/3/controller/user/action/profile 

WHY動作和CONTROLER時您要求的導航容器對象中的參數。 $ page-> isActive()檢查需要這些數據才能完美匹配。

THE FIX:

延伸MVC導航頁面和提供替代getHref()方法...一個去除動作,控制器和模塊PARAMS當路由沒有定義它們。

+0

你能舉個例子嗎? –

回答

0

我已經這樣做了修正此怪異的行爲:

  • 延伸MVC導航頁面
  • 提供一種替代getHref()方法
  • 支票路線,不具有動作,控制器和模塊參數和在href生成之前將它們從params數組中移除。

這種方式isActive匹配仍然有效,因爲我們沒有以任何方式修改路由或導航節點。

+0

也許你應該提交一個錯誤報告,因爲這肯定不是預期的行爲:http://framework.zend.com/issues –