Aar*_*ray 3 php zend-navigation zend-framework2
我正在尝试从模块中添加模块特定的导航项.我可能这样做完全错了.到目前为止我所拥有的是:
config/autoload/navigation.global.php(这个到目前为止工作)
<?php
return array(
'navigation' => array(
'default' => array(
array(
'label' => 'Home',
'route' => 'home',
'order' => -100,
'pages' => array(
),
),
),
),
);
Run Code Online (Sandbox Code Playgroud)
module/Books/Module.php :(我想在 Home 下添加'Books'导航项(不是内联的))
class Module
{
public function onPreDispatch($e) {
$pages = array(
array(
'label' => 'Books',
'route' => 'books',
),
);
$navigation = $e->getParam('application')->getServiceManager()->get('navigation');
$navigation->findOneByRoute('home')->addPages($pages);
}
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
所以在上面的例子中(路由是正确的),我没有收到错误,事件在预调度上触发,但没有任何东西被添加到导航容器中.
我想要完成的是导航如下:
Home
|-> Books
|-> Module2
|-> etc..
Run Code Online (Sandbox Code Playgroud)
Sto*_*mov 11
您不需要挂钩事件.只需将模块特定的导航配置放在模块的module.config.php中.每个模块的配置都已合并,如果您有缓存,如果您为许多模块执行此操作,那么在性能方面会更好.
重要的是在导航中为您的项目命名.在config/autoload/navigation.global.php中添加主项的名称:
<?php
return array(
'navigation' => array(
'default' => array(
'home' => array( // <-- name "home" added (name is arbitrary)
'label' => 'Home',
'route' => 'home',
'order' => -100,
),
),
),
);
Run Code Online (Sandbox Code Playgroud)
然后在模块/ Books/config/module.config.php中
return array(
'navigation' => array(
'default' => array(
'home' => array(
'pages' => array(
'home/book' => array( // <-- name is arbitrary
'label' => 'Books',
'route' => 'books',
),
),
),
),
),
);
Run Code Online (Sandbox Code Playgroud)
最后两个配置合并,你有一个导航键:
return array(
'navigation' => array(
'default' => array(
'home' => array(
'label' => 'Home',
'route' => 'home',
'order' => -100,
'pages' => array(
'home/book' => array(
'label' => 'Books',
'route' => 'books',
),
),
),
),
),
);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)
斯托扬
| 归档时间: |
|
| 查看次数: |
2643 次 |
| 最近记录: |