Php 我应该在哪里填充Zend_导航容器?

Php 我应该在哪里填充Zend_导航容器?,php,zend-framework,zend-navigation,Php,Zend Framework,Zend Navigation,在我的应用程序中,我应该在哪里定义Zend Navigation使用的顶级和低级页面?我的顶级导航栏视图助手将与生成子导航的视图助手分开。我通常在控制器插件中这样做。在这里,我可以基于当前路由或请求参数创建导航,然后在重新设计导航时,可以轻松地从应用程序资源传递到视图/布局,并切换到另一个视图/布局。更简单的方法是在一个位置定义所有导航。它支持无限嵌套(子)页面,这意味着您可以将主菜单作为基本级别,然后将每个主页下的子页面作为子菜单。使用视图帮助程序,您可以轻松地仅自动输出当前活动页面的子页面菜

在我的应用程序中,我应该在哪里定义Zend Navigation使用的顶级和低级页面?我的顶级导航栏视图助手将与生成子导航的视图助手分开。

我通常在控制器插件中这样做。在这里,我可以基于当前路由或请求参数创建导航,然后在重新设计导航时,可以轻松地从应用程序资源传递到视图/布局,并切换到另一个视图/布局。

更简单的方法是在一个位置定义所有导航。它支持无限嵌套(子)页面,这意味着您可以将主菜单作为基本级别,然后将每个主页下的子页面作为子菜单。使用视图帮助程序,您可以轻松地仅自动输出当前活动页面的子页面菜单

这样可以将所有导航保持在一个位置,以便于将来的维护

例如,我在application.ini文件中使用定义了站点范围的导航,然后在我的视图脚本中使用设置菜单格式

这是我正在处理的项目中我的application.ini文件导航配置的一个小摘录:

resources.navigation.pages.exhibits.label                   = "Exhibits"
resources.navigation.pages.exhibits.controller              = "exhibits"
resources.navigation.pages.exhibits.action                  = "index"
resources.navigation.pages.exhibits.pages.index.label       = "Search Exhibitors"
resources.navigation.pages.exhibits.pages.index.controller  = exhibits
resources.navigation.pages.exhibits.pages.index.action      = index
resources.navigation.pages.exhibits.pages.search.label      = "Search Exhibits"
resources.navigation.pages.exhibits.pages.search.controller = exhibits
resources.navigation.pages.exhibits.pages.search.action     = "search"
resources.navigation.pages.exhibits.pages.new.label         = "New Exhibitor"
resources.navigation.pages.exhibits.pages.new.controller    = exhibits
resources.navigation.pages.exhibits.pages.new.action        = "new"
resources.navigation.pages.exhibits.pages.import.label      = "Import Exhibits"
resources.navigation.pages.exhibits.pages.import.controller = exhibits
resources.navigation.pages.exhibits.pages.import.action     = "import"

resources.navigation.pages.sales.label                      = "Sales"
resources.navigation.pages.sales.controller                 = "sales"
resources.navigation.pages.sales.action                     = index
resources.navigation.pages.sales.pages.index.label          = "Review/Search"
resources.navigation.pages.sales.pages.index.controller     = sales
resources.navigation.pages.sales.pages.index.action         = index
resources.navigation.pages.sales.pages.edit.label           = Add/Edit Sales
resources.navigation.pages.sales.pages.edit.controller      = sales
resources.navigation.pages.sales.pages.edit.action          = edit
resources.navigation.pages.sales.pages.flags.label          = Flags/Problems
resources.navigation.pages.sales.pages.flags.controller     = sales
resources.navigation.pages.sales.pages.flags.action         = flags
在my layout.phtml文件中:

<div id='mainmenu'>
  <?php echo $this->navigation()->menu()->setMaxDepth(0); ?>
</div> <!-- #mainmenu -->
<div id='submenu'>
  <?php echo $this->navigation()->menu()->setOnlyActiveBranch(true)
                                        ->setMinDepth(1)
                                        ->setMaxDepth(1); ?>
</div> <!-- #submenu -->


因此,当用户进入展示页面时,他们只看到该页面的子页面,销售页面也是如此。非常简单而且非常有效。

所以我应该使用专用的控制器插件来实现这一点?太棒了!非常感谢。我可以使用路由名称代替指定控制器和操作吗?这样我就可以简单地修改路线,更改将反映在导航中。我从来没有在Zend_导航中使用过它们,但你可以。*.route参数可用于每个页面,以指定要使用的路由器。有关用法,请参阅。