我在xml中有一个简单的导航设置,看起来像这样:
<nav>
<page1>
<controller>foo</controller>
<route>default</route>
<pages>
<p1sub1>
<controller>foo</controller>
<action>bar</action>
<route>foobar</route>
<params>
<bar>specialId</bar>
</params>
</p1sub1>
<p1sub2>
<controller>foo</controller>
<action>bum</action>
</p1sub2>
</pages>
</page1>
<page2>
<controller>fee</controller>
<route>default</route>
<pages>
<p2sub1>
<controller>fee</controller>
<action>zip</action>
</p2sub1>
<p2sub2>
<controller>fee</controller>
<action>zap</action>
</p2sub2>
</pages>
</page2>
</nav>
再加上如下所示的路由定义:
routes.foobar.route = "foo/:specialId/bar"
routes.foobar.defaults.controller = foo
routes.foobar.defaults.action = bar
routes.foobar.defaults.specialId = 999
在我的引导程序中,我将这个导航配置分配给视图:
$config = new Zend_Config_Xml('path/to/nav.xml', 'nav');
$navigation = new Zend_Navigation($config);
$this->getResource('layoutview')->navigation($navigation);
然后,在我的布局中,我这样做是为了呈现顶层:
<?= $this->navigation()->menu()->setMaxDepth(0) ?>
下一级菜单需要在视图脚本中呈现为调用的控制器操作,因此:
<?= $this->navigation()->menu()->setOnlyActiveBranch(true)->setRenderParents(false) ?>
如果我访问/foo/bum、/fee/zip 或/fee/zap,它都可以按预期工作。我得到了两个正确呈现的菜单,并突出显示了相应的菜单项。美妙。然而。。。当我访问/foo/123/bar 时,我根本没有菜单。我现在花了几个小时来研究这个问题,调试/单步完成继承噩梦,即 Zend 导航及其相关的菜单渲染,但我根本不明白它为什么要这样做。我再也看不见树木的木头了。任何指示将不胜感激。
典型。在发布后的几分钟内,我自己解决了。我只是从导航的 XML 定义中删除了 params 节点。所以而不是
<controller>foo</controller>
<action>bar</action>
<route>foobar</route>
<params>
<bar>specialId</bar>
</params>
我改用了这个
<controller>foo</controller>
<action>bar</action>
<route>foobar</route>
简单。