【发布时间】:2012-01-31 20:34:53
【问题描述】:
在 Zend_Navigation_Container 页面上使用 findAll 方法时,找到的页面将从容器对象中删除。
即使我克隆容器对象并在这个克隆对象上调用 findAll,也会发生同样的事情。
我不知道它是怎么发生的。
但是,我注意到只有在我尝试“查找”第二级(或更深)的页面时才会发生这种情况
Same problem seems to be described here, no answer was given...
这里有一些代码,可以重现问题:
1。第一种方法,不克隆,任何“找到”的页面都从容器中删除
<?php
$container = new Zend_Navigation(array(
array(
'label' => 'Page 1',
'route' => 'default',
'pages' => array(
array(
'label' => 'Page 1.1',
'route' => 'default',
),
)
),
array(
'label' => 'Page 2',
'route' => 'default',
),
array(
'label' => 'Page 3',
'route' => 'default',
)
));
echo $this->navigation($container)->menu()->renderMenu($container);
echo '<br /><hr /><br />';
echo $this->navigation($container)->menu()->renderMenu(new Zend_Navigation($container->findAllByLabel('Page 2')));
echo '<br /><hr /><br />';
echo $this->navigation($container)->menu()->renderMenu($container);
?>
2。第二次尝试,克隆,从容器中删除“找到”的第二级(和更深)页面
<?php
$container = new Zend_Navigation(array(
array(
'label' => 'Page 1',
'route' => 'default',
'pages' => array(
array(
'label' => 'Page 1.1',
'route' => 'default',
),
)
),
array(
'label' => 'Page 2',
'route' => 'default',
),
array(
'label' => 'Page 3',
'route' => 'default',
)
));
$container1 = clone $container;
$container2 = clone $container;
$container3 = clone $container;
echo $this->navigation($container1)->menu()->renderMenu($container1);
echo '<br /><hr /><br />';
echo $this->navigation($container2)->menu()->renderMenu(new Zend_Navigation($container2->findAllByLabel('Page 1.1')));
echo '<br /><hr /><br />';
echo $this->navigation($container3)->menu()->renderMenu($container3);
?>
3。最后一个,克隆,“找到”的第一级(和更深)页面不会从容器中删除
与上面相同的代码,只有“Page 2”代替了“Page 1.1”
谁能告诉我这里发生了什么?
我想要实现的只是在两个不同的地方显示相同的菜单。这两个地方的菜单都是从容器页面的一部分构建的,用 findXXX 方法过滤...
但是对于描述的问题,这似乎是不可能的:(
提前感谢您的任何建议。
【问题讨论】:
标签: zend-framework zend-navigation