Zend framework Zend Framework(1.12)导航与正则表达式路由相结合

Zend framework Zend Framework(1.12)导航与正则表达式路由相结合,zend-framework,navigation,routes,Zend Framework,Navigation,Routes,我有一个简单的xml导航设置,如下所示: <nav> <page1> <controller>foo</controller> <route>default</route> <pages> <p1sub1> <controller>foo</controller>

我有一个简单的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 navigation及其相关菜单呈现的继承噩梦,但我不明白它为什么要这样做。我再也看不见树木了。任何指点都将不胜感激。

典型。在发布后几分钟内,我自己解决了这个问题。我只是从导航的XML定义中删除了params节点。所以不是

<controller>foo</controller>
<action>bar</action>
<route>foobar</route>
<params>
    <bar>specialId</bar>
</params>
foo
酒吧
福巴
特殊的
我用这个来代替

<controller>foo</controller>
<action>bar</action>
<route>foobar</route>
foo
酒吧
福巴
简单