2014-04-05 55 views
0

我想在我的视图中制作导航按钮,例如index.phtml,但它不起作用。我确实知道如何在Zend1中完成,但在Zend2中我遇到了问题。我的代码如下所示(文件index.phtml):Zend2 navigation

$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

你试过<?PHP的回声$ this-> navigation() - > menu-> renderMenu($ container)?>? –

+0

是的,我只是做了,仍然是一样的。 :( – b4rt3kk

回答

0

导航页面具有依赖关系,只有在视图中创建容器类new才能满足这些依赖关系。 Mvc页面需要一个RouteStackInterface(路由器)实例和一个RouteMatch实例。同样Uri页面需要当前的Request实例。

如果您查看Zend\Navigation\Service\AbstractNavigationFactory及其preparePagesinjectComponents方法,您可以清楚地看到此内容。

的看法是不被实例化的菜单,而不是把菜单配置规格在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规范的名称0 ...

<?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,可以从导航助手访问并用于检索页面。

下面是一个例子寻找与匹配的页面标签页,然后在渲染之前,改变它(显然不是一个理想的搜索PARAM,但它给你的想法)

$page = $this->navigation('TableActionsMenu')->findOneByLabel('On/Off'); 
$page->setLabel('Off/On'); 
// and then render ... 
echo $this->navigation('TableActionsMenu')->menu();