2014-04-05 103 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();