Zend_Navigation网址生成问题

时间:2009-08-27 08:11:01

标签: zend-framework navigation

我将导航组件用于站点菜单。我还使用let zend从请求参数中找出所选择的菜单项 - 我想这是自动完成的。唯一的问题是,为了使其工作,必须在每个节点的导航配置中指定动作和控制器。这也意味着当zend生成从路由,操作和控制器信息到自动附加到生成的链接的链接时。

有人有同样的问题吗?

Zend manual section,解释了Mvc导航页面功能。

示例:

bootstrap中定义的一些路由:

 $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

为什么您要求的导航容器对象中的操作和控制器参数。 $ page-> isActive()检查需要此数据才能完美匹配。

THE FIX:

扩展mvc导航页面并提供另一种getHref()方法...当路由没有定义它们时,它会删除动作,控制器和模块参数。

1 个答案:

答案 0 :(得分:0)

我这样做是为了解决这个奇怪的行为:

  • 扩展mvc导航页面
  • 提供另一种getHref()方法
  • 检查路由,没有操作,控制器和模块参数,并在href生成之前从params数组中删除它们。

这样,isActive匹配仍然有效,因为我们没有以任何方式修改路径或导航节点。