我想在我的视图中制作导航按钮,例如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返回对象(Zend \ Navigation \ Navigation),所以到目前为止它很好。问题是,如何展示......
答案 0 :(得分:0)
导航页面具有仅通过在视图中创建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';
}
}
将工厂映射到service_manager
的{{1}}规范中的服务名称...
module.config.php
现在,您可以使用刚刚映射的服务名称<?php
return array(
'navigation' => array(// as above ... )
'service_manager' => array(
'factories' => array(
'TableActionsMenu' => 'Application\Navigation\Service\TableActionsFactory',
),
),
);
来调用视图助手
TableActionsMenu
最后,如果我怀疑你需要根据视图更改页面的属性,你也可以这样做,导航容器有find* methods,可以从导航助手访问并习惯检索页面。
这是一个寻找具有匹配页面标签的页面的示例,然后在渲染之前更改它(显然不是理想的搜索参数,但它可以为您提供想法)
<div class="table-column">
<?php echo $this->navigation('TableActionsMenu')->menu(); ?>
</div>