ZF2将params添加到setPartial子菜单

时间:2014-12-16 14:06:48

标签: php navigation zend-framework2 partial

我使用此部分来生成我的子菜单。

<?php foreach ($this->container as $page): ?>
    <?php foreach ($page->getPages() as $child): ?>
        <a href="<?php echo $child->getHref(); ?>" class="list-group-item">
            <?php echo $this->translate($child->getLabel()); ?>
        </a>
    <?php endforeach; ?>
<?php endforeach; ?>

这就是这样称呼的:

$this->navigation('navigation')->menu()->setPartial('partial/submenu')->render();

但是当我渲染菜单时,“$ child-&gt; getHref()”会在没有所需“slug / id”参数的情况下呈现网址。

我尝试在ZF1中创建带有“$ this-&gt; url()”的网址,您可以将数组中的参数传递给部分但在ZF2中似乎不再有效。

有人能告诉我如何将params添加到菜单网址吗?

提前致谢!

PS!

我不是指$ this-&gt;部分,我在谈论$ this-&gt;导航('导航') - &gt; menu() - &gt; setPartial('partial / submenu ') - &gt; render()显然不支持param数组。

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,是的,你可以将params传递给partials。例如:

<?php echo $this->partial('partial.phtml', array( 'from' => 'Team Framework', 'subject' => 'view partials')); ?>

请参阅http://framework.zend.com/manual/2.3/en/modules/zend.view.helpers.partial.html

我不确定这完全解决了您的问题,因为您没有显示菜单助手是什么。这是你自己的助手吗?你是说setPartial方法只接受一个参数吗?

所有这一切,你考虑过Spiffy Navigation吗? https://github.com/spiffyjr/spiffy-navigation

答案 1 :(得分:0)

自问这个问题以来已经过了一段时间,但今天我遇到了同样的问题(使用2.4版本)。

如果要在菜单中包含需要某些参数的分段路径,则无法将这些路径传递到导航的视图部分帮助程序。

我所做的更改允许将ViewModel个实例传递给菜单导航助手的setPartial()方法。该视图模型将是导航的部分模板渲染的上下文;因此,我们可以使用它来设置路径创建所需的变量,并使用$this->variableName就像在其他视图中一样获取它们。

此更改要求您扩展Menu帮助程序(或导航帮助程序需要它)。

namespace Foo\Navigation;

use Zend\Navigation\AbstractContainer;
use Zend\View\Model\ViewModel;

class Menu extends \Zend\View\Helper\Navigation\Menu
{
    public function renderPartial($container = null, $partial = null)
    {
        if (null == $container) {
            $container = $this->getContainer();
        }

        if ($container && $partial instanceof ViewModel) {
            $partial->setVariable('container', $container);
        }

        return parent::renderPartial($container, $partial);
    }

    public function setPartial($partial)
    {
        if ($partial instanceof ViewModel) {
            $this->partial = $partial;
        } else {
            parent::setPartial($partial);
        }
        return $this;
    }
}

因为这扩展了帮助程序的默认实现,所以module.config.php中需要更新配置以确保加载扩展类。

'navigation_helpers' => [
    'invokables' => [
         'Menu' => 'Foo\Navigation\Menu',
     ],
 ],

菜单助手将接受视图模型实例。

$viewModel = new \Zend\View\Model\ViewModel;
$viewModel->setTemplate('path/to/partial/template')
          ->setVariable('id', $foo->getId());

echo $this->navigation()
          ->menu()
          ->setPartial($viewModel)
          ->render();

实际部分脚本中的唯一更改将要求您使用URL视图助手创建URL。

foreach ($container as $page) {
    //...
    $href = $this->url($page->getRoute(), ['id' => $this->id]);
    //...
}