假设您使用的是 beta5 - 您只是错误地配置了 viewhelper。请参阅这篇文章,了解如何正确执行此操作。
关于如何使用导航:我会在名为 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'));
}
),
),
);
(不确定导航类名称。没有看过它们。)
这做了三件事:
- 如果zend的导航,提供一个称为
navigation
指向实际实例的服务
- 提供您的视图助手并将其提供给导航实例的引用
navigation
创建一个包含导航配置的新顶级键。其他模块可以在此处添加自定义导航,而无需更改设置中的任何内容。
例如,在您的控制器中,您通过调用代码获取导航实例
$this->getServiceLocator()->get('navigation');
而在您的视图中,助手可以通过其构造函数访问导航:
Navigation extends // ...
{
public function __construct($navigation)
{
// do anything you want
}
}
其他模块可以通过写入相同的键向导航添加条目:
return array(
'navigation' => array(
// further navigation entries
),
);
您将初始逻辑放在哪里(例如设置服务/视图助手)取决于您。我更喜欢为此编写一个自己的模块,可以通过一行代码禁用它(导致导航不再存在)。但是默认模块可能也是一个好地方。最终,您可以为导航和视图助手创建自己的工厂类,而不是将配置与代码混合。
免责声明:代码只是草稿 - 未经测试。