Zend framework Zend_导航:在使用多个容器渲染面包屑时遇到问题

Zend framework Zend_导航:在使用多个容器渲染面包屑时遇到问题,zend-framework,zend-navigation,Zend Framework,Zend Navigation,可能重复: 我试图让面包屑呈现在我的应用程序中(它们不会出现在任何地方,甚至不会出现在主页上,主页上有一个对应的Zend Page Uri对象),它有多个导航区域-主导航区域和实用导航区域。对于菜单生成,我有一个MenuController,可以在布局中使用它进行渲染: $this->layout()->utility = $this->action('render', 'menu', null, array('menu' => $this->utilityId)

可能重复:

我试图让面包屑呈现在我的应用程序中(它们不会出现在任何地方,甚至不会出现在主页上,主页上有一个对应的Zend Page Uri对象),它有多个导航区域-主导航区域和实用导航区域。对于菜单生成,我有一个MenuController,可以在布局中使用它进行渲染:

$this->layout()->utility = $this->action('render', 'menu', null, array('menu' => $this->utilityId));
$this->layout()->nav = $this->action('render', 'menu', null, array('menu' => $this->mainMenuId));
utilityId
mainMenuId
属性是从数据库中获取的数字

菜单控制器的render方法只是构建一个数组并创建一个Zend导航对象,然后调用setContainer并将其设置为该容器。这是伪代码,因为它相当长:

// MenuController.php
private function renderAction() {
    $itemArray[] = array('label' => $label, 'uri' => $uri ); // in a loop
    $container = new Zend_Navigation($itemArray);
    if ( $container instanceof Zend_Navigation_Container ) {
       $this->view->navigation()->setContainer( $container );
       $uri = $this->_request->getPathInfo();
       $item = $this->view->navigation()->findByUri($uri);
       $item->active = true;
    }
}
因此,从实用程序和nav的布局中调用此渲染方法两次

编辑: 我认为问题在于我需要指定$container,这样我的代码就可以

$this->navigation($container)->breadcrumbs();
但是,因为我使用的是
$this->action('render','menu')
所以
$container
变量设置在那里并且没有返回,有没有其他方法可以指定容器?可能使用
$this->layout()->nav
和其中指向容器的属性


看起来是同一个问题,有人建议使用Zend_注册表设置/获取它们,也许我会尝试一下。

我怀疑您没有导航层次结构。你需要一页一页

e、 g

通过以上操作,面包屑将呈现在除主页外的所有活动页面上。。。如果执行此操作,则所有页面:

$this->navigation()->breadcrumbs()->setMinDepth(0); // don't skip the root page

也许是别的,但很难说。不过,我希望这能有所帮助

这可能是一个肮脏的解决方案,但我使用Zend_注册表手动设置容器引用,如下所示:

Zend_Registry::set( 'nav' . $menu, $container );
然后像这样吐出来:

$main = Zend_Registry::get( 'nav' . $this->mainMenuId );
echo $this->navigation( $main )->breadcrumbs()->setMinDepth(0);

啊。我没有层次结构,但如果我指定setMinDepth(0),它至少应该为主页吐出面包屑,对吗?也许我会创建一个测试站点,然后在层次结构上乱搞。
$main = Zend_Registry::get( 'nav' . $this->mainMenuId );
echo $this->navigation( $main )->breadcrumbs()->setMinDepth(0);