導航頁面具有依賴關係,只有在視圖中創建容器類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
規範的名稱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();
你試過<?PHP的回聲$ this-> navigation() - > menu-> renderMenu($ container)?>? –
是的,我只是做了,仍然是一樣的。 :( – b4rt3kk