ZendFramework - Zend_Navigation。 Find *方法从容器对象中删除页面

时间:2012-01-31 20:34:54

标签: zend-framework zend-navigation

在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方法过滤......

但是有了描述的问题,似乎是不可能的:(

提前感谢任何建议。

1 个答案:

答案 0 :(得分:1)

试试这个,你走在正确的轨道上,我只是认为你在Zend_Navigation和navigation()视图帮助器之间存在差异。

<?php
//instantiate Zend_navigation object... This also registers this container to the view      helper
$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',
    )
));
//now we use the view helper
echo $this->navigation()->menu()->renderMenu($container);
echo '<br /><hr /><br />';
$label = $this->navigation()->findAllByLabel('Page 2');
echo $this->navigation()->menu()->renderMenu($label);
echo '<br /><hr /><br />';
echo $this->navigation()->menu()->renderMenu($container);
?>

我个人喜欢在bootstrap中设置导航并使用配置文件来制作容器。

 protected function _initNavigation() {

        $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/site.xml');
        $container = new Zend_Navigation($config);
        $registry = Zend_Registry::getInstance();
        $registry->set('Zend_Navigation', $container);
    }

希望这会有所帮助:)