Php 来自控制器的zf2导航注入页面
在ZF2中,可以同时使用数组和数据库组合(扩展)导航项 我有根导航(深度级别1和2),其配置作为php文件navigation.config.php驻留。现在有一个基于产品类别的页面,该页面将为每个类别创建一个导航,其中包含一个子页面Php 来自控制器的zf2导航注入页面,php,zend-framework2,Php,Zend Framework2,在ZF2中,可以同时使用数组和数据库组合(扩展)导航项 我有根导航(深度级别1和2),其配置作为php文件navigation.config.php驻留。现在有一个基于产品类别的页面,该页面将为每个类别创建一个导航,其中包含一个子页面 module \-submodule \-category 1 \-add \-edit \-form \-list \- ... \-category n 每次我添加一个类别时,将所有内容都写成一个数组
module
\-submodule
\-category 1
\-add
\-edit
\-form
\-list
\- ...
\-category n
每次我添加一个类别时,将所有内容都写成一个数组是很烦人的。相反,如果我通过从db中读取类别来使用代码加载它,而不是创建一个用于导航的递归mvc页面,这将是一件好事
所有类别实际上都调用同一个控制器,但为了用户界面的缘故,我必须如上所述
我通过使用控制器创建一个页面来进行测试
public function listAction() {
$this->addPages(
array(
array(
'label' => 'R12313',
'route' => 'home',
'pages' => array(
array(
'label' => 'R12313cccc',
'route' => 'home',
)
)
),
array(
'label' => 'R123132',
'route' => 'home',
)
)
);
}
public function addPages($pages = array(), $min = 1, $max = 2) {
$navigation = $this->services->get('viewhelpermanager')->get('navigation');
$navigation = $navigation('navigation');
$active = $navigation->findActive($navigation->getContainer(), $min, $max);
if (isset($active['page'])) {
$active = $active['page'];
$pages = array('route' => 'home', 'pages' => $pages);
$newpage = \Zend\Navigation\Page\AbstractPage::factory($pages);
$newpage->setDefaultRouter($this->services->get('router'));
$active->addPages($newpage);
}
}
结果很好,但是我无法为它自己和它的父项设置菜单。
也许在模块引导中这样做更好
知道怎么做吗?好的,这是我从控制器添加页面的解决方法。也许有更好的办法
public function addPages($id, $pages = array()) {
$services = $this->getServiceLocator();
$navigation = $services->get('viewhelpermanager')->get('navigation');
$navigation = $navigation('navigation');
$active = $navigation->findById($id);
if ($active instanceof \Zend\Navigation\Page\AbstractPage) {
$navigationFactory = new \Zend\Navigation\Service\ConstructedNavigationFactory($pages);
$pages = $navigationFactory->getPages($services);
$active->addPages($pages);
}
}
但是,如果要以这种方式添加页面,则必须在navigation.config.php中指定页面id