我只是想知道什么是最好的方式,在Zend的Framework2使用Zend_Navigation。 目前,我试图给加一个配置的页眉和页脚菜单。 这两个菜单应自动填充。 虽然,我遇到了很多问题:
一)为默认的菜单最好的地方应该是有希望的应用程序模块
b)中添加以下到module.config.php的根:
'view_helpers' => array(
'helper_map' => array(
'navigation' => 'Application\View\Helper\Navigation'
),
),
我Navigation.php位于./module/Application/src/Application/View/Helper/Navigation.php
并包含:
class Navigation extends AbstractContainer {
public function __construct($menu = null) {
var_dump($menu);
}
}
我知道,类可能是错误的。 但此刻我没有得到ZF2甚至加载类。 怎么了 ?
假设你正在使用beta5的 - 你只是配置您的视图助手错误。 见这个职位上如何做是正确的。
关于如何使用导航:我想创建中的ServiceManager称为服务navigation
,并把我的导航到一个新的配置项:
return array(
'navigation' => array(
// your navigation config goes here
),
'servicemanager' => array(
'factories' => array(
'navigation' => function($sm) {
$config = $sm->get('Configuration');
$navigation = new \Zend\Navigation\Navigation($config->get('navigation'));
return $navigation;
}
),
),
'view_helpers' => array(
'factories' => array(
'navigation' => function($sm) {
return new \My\View\Helper\Navigation($sm->get('navigation'));
}
),
),
);
(不知道导航类的名字。还没有对他们的样子。)
这做了三两件事:
- 提供了一个叫服务
navigation
指向实际来说,如果Zend的导航 - 提供您的视图助手,并把它交给你的导航的实例的引用
- 创建一个新的顶级键
navigation
包含了导航配置。 其它模块可以在这里添加自定义导航,而无需在安装任何更改。
例如,在你的控制器,你的代码通过调用获取导航实例
$this->getServiceLocator()->get('navigation');
而在您的视图助手访问由它的构造函数导航:
Navigation extends // ...
{
public function __construct($navigation)
{
// do anything you want
}
}
其他模块可以通过写入相同的密钥条目添加到您的导航:
return array(
'navigation' => array(
// further navigation entries
),
);
当你把最初的逻辑(例如建立服务/视图助手)是由你。 我宁愿写一个自己的模块,用于此其可与一个单一的代码行(导致不存在导航了)被禁用。 但是默认的模块可能是一个不错的地方,很好。 最终你可以创建自己的工厂类的导航和视图助手,而不是你的代码混合配置。
免责声明:代码的只是一个草稿 - 未经测试。