【问题标题】:Zend_Navigation url generation issueZend_Navigation url 生成问题
【发布时间】:2009-08-27 08:11:01
【问题描述】:

我将导航组件用于站点菜单。我还使用 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() 检查需要这些数据才能完美匹配。

修复:

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

【问题讨论】:

  • 你能举个例子吗?

标签: zend-framework navigation


【解决方案1】:

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

  • 扩展 mvc 导航页面
  • 提供另一种 getHref() 方法
  • 检查没有 action 、 controller 和 module 参数的路由,并在生成 href 之前将它们从 params 数组中删除。

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

【讨论】:

猜你喜欢
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
相关资源
最近更新 更多