【问题标题】:ZendFramework - Zend_Navigation. Find* methods removes pages from container objectZendFramework - Zend_Navigation。 Find* 方法从容器对象中删除页面
【发布时间】: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


    【解决方案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);
    ?>
    

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

     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);
        }
    

    希望这会有所帮助:)

    【讨论】:

    • 不,你不能使用带有 Find 返回结果的 renderMenu,因为 render 需要 Zend_Navigation_Container 对象,而不是数组。正如我所描述的,您的代码将不起作用,并且进行必要的修改会显示相同的问题。我以何种方式向视图助手提供容器对象并不重要。但是,我已经设法通过不克隆而是从 pages 数组实例化新的导航对象来做我想做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多