0

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

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

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 加载类。怎么了 ?

4

1 回答 1

1

假设您使用的是 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
    ),
);

您将初始逻辑放在哪里(例如设置服务/视图助手)取决于您。我更喜欢为此编写一个自己的模块,可以通过一行代码禁用它(导致导航不再存在)。但是默认模块可能也是一个好地方。最终,您可以为导航和视图助手创建自己的工厂类,而不是将配置与代码混合。

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

于 2012-07-09T20:55:51.063 回答