3

大家好!

我正在学习zf2,并尝试设置导航面板(基于:Zend Framework 2: Zend_Navigation),但电脑的答案仍然是:

An error occurred 执行过程中发生错误;请稍后再试。附加信息:Zend\ServiceManager\Exception\ServiceNotFoundException 文件:/var/www/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:453 消息:Zend\ServiceManager\ServiceManager::get 无法获取或创建导航实例

module.config.php 包含:

   'servicemanager' => array(
        'factories' => array(
            'navigation' => function($sm) {
                $config = $sm->get('Config');
                $navigation = new \Zend\Navigation\Navigation($config->get('navigation'));
                return $navigation;
            }
        ),
    ),

我在主 config/autoload 文件夹中有一个 application.global.php,如下所示:

<?php

return array(
    // All navigation-related configuration is collected in the 'navigation' key
    'navigation' => array(
        // The DefaultNavigationFactory we configured in (1) uses 'default' as the sitemap key
        'default' => array(
            // And finally, here is where we define our page hierarchy
            'Album' => array(            
                    'label'      => 'Albumlista',
                    'route'      => 'album',
                    'action' => 'index',
                    'pages'      => array(
                        array(
                            'label'      => 'Add',
                            'route'      => 'album',
                            'action'     => 'add'
                            )           
                       )
               ),
            'Application' => array(            
                    'label'      => 'Alap alkalmazás',
                    'route'      => 'application',
                    'action' => 'index',

               )
        ),
    ),

);

从控制器我给出这个命令:

$config = $this->getServiceLocator()->get('navigation');

有人可以帮我解决这个问题吗?我读到了http://adam.lundrigan.ca/2012/07/quick-and-dirty-zf2-zend-navigation/,我试过了,我做到了,但我想与 acl 结合,这样我写了这个问题。

感谢您的每一个帮助!

4

3 回答 3

3

如果您查看 Naviagtion 类的构造函数,它需要一个 Pages 数组或一个 Traversable 对象。您正在传入一个包含页面数组的数组,试试这个:

'servicemanager' => array(
    'factories' => array(
        'navigation' => function($sm) {
            $navigation = new \Zend\Navigation\Service\DefaultNavigationFactory;
            $navigation = $navigation->createService($sm);

            return $navigation;
        }
    ),
),

默认工厂将通过在导航配置下查找默认节点来自动找到您的配置。

您也可以保持原样,但将“默认”节点(在配置中的 Navigation 节点下)传递给 Navigation 构造函数,因为这是实际的页面定义。

于 2013-02-12T09:31:46.397 回答
0

当我更改以下行时,我的问题解决了application.config.php

'config/autoload/{,*.}{global,local}.php', //[This is default setting]

config_glob_paths' => array( '<PUT_ABSOLUTE_PATH_HERE>{,*.}{global,local}.php', ),

代替'config/autoload'完整路径而不是相对路径。

于 2014-04-01T08:18:39.870 回答
0

我认为您正在使用视图助手

$this->escape($this->somevar); //这是zf1视图助手

在 zf2 中,您可以使用视图助手逃脱

$this->escapeHtml($this->somevar);

于 2016-02-09T20:24:46.940 回答