我想在我的视图中创建导航按钮,例如index.phtml,但它不起作用。我确实知道如何在Zend1中做到这一点,但是在Zend2中我有一个问题。我的代码看起来像这样(文件index.phtml):
$container = new \Zend\Navigation\Navigation($tableActions);
var_dump($container);
echo '<div class="table-column">';
echo $this->navigation($container)->menu();
echo '</div>';变量$tableAction如下所示:
public $tableActions = array(
array(
'label' => 'On/Off',
'module' => 'import',
'controller' => 'import',
'action' => 'setstatus',
'params' => array('id' => null),
),
);我没有得到任何错误,只是整个网站在这条线上死了。var_dump返回object(ZendNavigationNavigation.),所以到目前为止一切都还好。问题是,如何展示它。
发布于 2014-04-06 17:59:58
导航页面具有依赖项,仅在视图中创建new容器类无法满足这些依赖项。Mvc页面需要一个RouteStackInterface (路由器)实例和一个RouteMatch实例。类似地,Uri页面需要当前的Request实例。
如果您查看一下Zend\Navigation\Service\AbstractNavigationFactory及其preparePages和injectComponents方法,就可以清楚地看到这一点。
视图不是实例化菜单的正确位置,而是将菜单配置规范放在module.config.php中……
<?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)
<?php
namespace Application\Navigation\Service;
use Zend\Navigation\Service\AbstractNavigationFactory;
class TableActionsFactory extends AbstractNavigationFactory
{
/**
* @return string
*/
protected function getName()
{
return 'table_actions';
}
}将工厂映射到module.config.php的service_manager规范中的服务名称...
<?php
return array(
'navigation' => array(// as above ... )
'service_manager' => array(
'factories' => array(
'TableActionsMenu' => 'Application\Navigation\Service\TableActionsFactory',
),
),
);现在,您可以使用刚刚映射的服务名称TableActionsMenu调用视图帮助器
<div class="table-column">
<?php echo $this->navigation('TableActionsMenu')->menu(); ?>
</div>最后,如果您需要根据视图更改页面的属性,您也可以这样做,导航容器具有find* methods,可以从导航助手访问它,并使用它来检索页面。
下面是一个寻找具有匹配页面标签的页面的示例,然后在呈现之前更改它(显然不是一个理想的搜索参数,但它给了您一个想法)
$page = $this->navigation('TableActionsMenu')->findOneByLabel('On/Off');
$page->setLabel('Off/On');
// and then render ...
echo $this->navigation('TableActionsMenu')->menu();https://stackoverflow.com/questions/22883752
复制相似问题