Zend framework2 Zend框架2:Zend_导航

Zend framework2 Zend框架2:Zend_导航,zend-framework2,Zend Framework2,我只是想知道在Zend Framework2中使用Zend_导航的最佳方式是什么。目前,我正在尝试为页眉和页脚菜单添加配置。两个菜单都应自动填充。不过,我遇到了很多问题: a) 默认菜单的最佳位置应该是应用程序模块 b) 我在module.config.php的根目录中添加了以下内容: 'view_helpers' => array( 'helper_map' => array( 'navigation' => 'Application\View

我只是想知道在Zend Framework2中使用Zend_导航的最佳方式是什么。目前,我正在尝试为页眉和页脚菜单添加配置。两个菜单都应自动填充。不过,我遇到了很多问题:

a) 默认菜单的最佳位置应该是应用程序模块

b) 我在module.config.php的根目录中添加了以下内容:

'view_helpers' => array(
    'helper_map' => array(
            'navigation' => 'Application\View\Helper\Navigation'
    ),
),
My Navigation.php位于./module/Application/src/Application/View/Helper/Navigation.php中

并载有:

class Navigation extends AbstractContainer {
    public function __construct($menu = null) {
        var_dump($menu);
    }
}

我知道这门课可能错了。但目前我甚至没有让ZF2加载该类。有什么问题吗?

假设您使用的是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'));
            }
        ),
    ),
);
(不确定导航类名。没有查看过。)

这有三件事:

  • 提供一个名为
    navigation
    的服务,指向实际实例 如果zend的导航
  • 提供视图助手,并将导航实例的引用交给它
  • 创建一个新的顶级键
    导航
    ,其中包含导航配置。其他模块可以在此处添加自定义导航,而无需更改设置中的任何内容
例如,在控制器中,通过调用

$this->getServiceLocator()->get('navigation');
在视图中,助手可以通过其构造函数访问导航:

Navigation extends // ...
{
    public function __construct($navigation)
    {
        // do anything you want
    }
}
其他模块可以通过写入相同的键向导航中添加条目:

return array(
    'navigation' => array(
        // further navigation entries
    ),
);
初始逻辑(如设置服务/视图助手)的放置位置由您决定。我更喜欢为此编写一个自己的模块,可以用一行代码禁用(导致导航不再存在)。但是默认模块可能也是一个好地方。 最终,您可以为导航和视图帮助器创建自己的工厂类,而不是将配置与代码混合

免责声明:代码只是草稿-未经测试