首页
学习
活动
专区
圈层
工具
发布

Zend2导航
EN

Stack Overflow用户
提问于 2014-04-06 00:45:21
回答 1查看 324关注 0票数 0

我想在我的视图中创建导航按钮,例如index.phtml,但它不起作用。我确实知道如何在Zend1中做到这一点,但是在Zend2中我有一个问题。我的代码看起来像这样(文件index.phtml):

代码语言:javascript
复制
$container = new \Zend\Navigation\Navigation($tableActions);
var_dump($container);
echo '<div class="table-column">';
echo $this->navigation($container)->menu();
echo '</div>';

变量$tableAction如下所示:

代码语言:javascript
复制
public $tableActions = array(
    array(
        'label' => 'On/Off',
        'module' => 'import',
        'controller' => 'import',
        'action' => 'setstatus',
        'params' => array('id' => null),
    ),
);

我没有得到任何错误,只是整个网站在这条线上死了。var_dump返回object(ZendNavigationNavigation.),所以到目前为止一切都还好。问题是,如何展示它。

EN

回答 1

Stack Overflow用户

发布于 2014-04-06 17:59:58

导航页面具有依赖项,仅在视图中创建new容器类无法满足这些依赖项。Mvc页面需要一个RouteStackInterface (路由器)实例和一个RouteMatch实例。类似地,Uri页面需要当前的Request实例。

如果您查看一下Zend\Navigation\Service\AbstractNavigationFactory及其preparePagesinjectComponents方法,就可以清楚地看到这一点。

视图不是实例化菜单的正确位置,而是将菜单配置规范放在module.config.php中……

代码语言:javascript
复制
<?php
return array(
    'navigation' => array(
        'table_actions' => array(
            array(
                'label' => 'On/Off',
                'module' => 'import',
                'controller' => 'import',
                'action' => 'setstatus',
                'params' => array('id' => null),
            ),
        ),
    ),
);

编写一个工厂扩展AbstractNavigationFactory类并实现getName()方法,该方法返回您的菜单规范键的名称(本例中为table_actions)

代码语言:javascript
复制
<?php
namespace Application\Navigation\Service;

use Zend\Navigation\Service\AbstractNavigationFactory;

class TableActionsFactory extends AbstractNavigationFactory
{
    /**
     * @return string
     */
    protected function getName()
    {
        return 'table_actions';
    }
}

将工厂映射到module.config.phpservice_manager规范中的服务名称...

代码语言:javascript
复制
<?php
return array(
    'navigation' => array(// as above ... )

    'service_manager' => array(
        'factories' => array(
             'TableActionsMenu' => 'Application\Navigation\Service\TableActionsFactory',
        ),
    ),
);

现在,您可以使用刚刚映射的服务名称TableActionsMenu调用视图帮助器

代码语言:javascript
复制
<div class="table-column">
    <?php echo $this->navigation('TableActionsMenu')->menu(); ?>
</div>

最后,如果您需要根据视图更改页面的属性,您也可以这样做,导航容器具有find* methods,可以从导航助手访问它,并使用它来检索页面。

下面是一个寻找具有匹配页面标签的页面的示例,然后在呈现之前更改它(显然不是一个理想的搜索参数,但它给了您一个想法)

代码语言:javascript
复制
$page = $this->navigation('TableActionsMenu')->findOneByLabel('On/Off');
$page->setLabel('Off/On');
// and then render ...
echo $this->navigation('TableActionsMenu')->menu();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22883752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档