Zend framework2 尝试多个导航时Zend Framework 2中的ServiceNotCreatedException

Zend framework2 尝试多个导航时Zend Framework 2中的ServiceNotCreatedException,zend-framework2,zend-navigation,Zend Framework2,Zend Navigation,我正在尝试创建多个导航菜单,以便根据特定的用户角色在我的应用程序中使用。大部分代码类似于zfc admin。当我在应用程序中使用zfc admin时,我可以打开一个管理菜单,但是我将有大约四个角色,并决定将其放在我的应用程序模块中 module.config.php 'navigation' => array( 'admin' => array( array( 'label' => 'Admin Home',

我正在尝试创建多个导航菜单,以便根据特定的用户角色在我的应用程序中使用。大部分代码类似于zfc admin。当我在应用程序中使用zfc admin时,我可以打开一个管理菜单,但是我将有大约四个角色,并决定将其放在我的应用程序模块中

module.config.php

'navigation' => array(
    'admin' => array(
        array(
            'label' => 'Admin Home',
            'route' => 'adminhome',
        ),
    ),
    'default' => array(
        array(
            'label' => 'Home',
            'route' => 'home',
        ),
    ),
),
namespace Application\Navigation\Service;
use Zend\Navigation\Service\DefaultNavigationFactory;

class AdminNavigationFactory extends DefaultNavigationFactory
{
    protected function getName()
    {
        return 'admin';
    }
}
public function getServiceConfig()
{
    return array(
        'factories' => array(
            'admin_navigation' => 'Application\Navigation\Service\AdminNavigationFactory',
        ),
    );
}
AdminNavigationFactory.php

'navigation' => array(
    'admin' => array(
        array(
            'label' => 'Admin Home',
            'route' => 'adminhome',
        ),
    ),
    'default' => array(
        array(
            'label' => 'Home',
            'route' => 'home',
        ),
    ),
),
namespace Application\Navigation\Service;
use Zend\Navigation\Service\DefaultNavigationFactory;

class AdminNavigationFactory extends DefaultNavigationFactory
{
    protected function getName()
    {
        return 'admin';
    }
}
public function getServiceConfig()
{
    return array(
        'factories' => array(
            'admin_navigation' => 'Application\Navigation\Service\AdminNavigationFactory',
        ),
    );
}
Module.php

'navigation' => array(
    'admin' => array(
        array(
            'label' => 'Admin Home',
            'route' => 'adminhome',
        ),
    ),
    'default' => array(
        array(
            'label' => 'Home',
            'route' => 'home',
        ),
    ),
),
namespace Application\Navigation\Service;
use Zend\Navigation\Service\DefaultNavigationFactory;

class AdminNavigationFactory extends DefaultNavigationFactory
{
    protected function getName()
    {
        return 'admin';
    }
}
public function getServiceConfig()
{
    return array(
        'factories' => array(
            'admin_navigation' => 'Application\Navigation\Service\AdminNavigationFactory',
        ),
    );
}
layout.phtml

<?php echo $this->navigation('admin_navigation')->menu(); ?>
如果我将layout.phtml更改为使用默认菜单,则一切都会按预期工作

<?php echo $this->navigation('navigation')->menu(); ?>

首先,我得到了完全相同的问题。将工厂配置从module类中的getServiceConfig()方法移动到module.config.php之后,它就工作了

因此,我的管理员导航现在的工作方式如下:

module.config.php (module/Admin/config/module.config.php)

返回数组(
//雅达雅达雅达。。。
“服务管理器”=>阵列(
“工厂”=>数组(
“导航”=>“Zend\navigation\Service\DefaultNavigationFactory”,
'adminnav'=>'Application\Navigation\Service\AdminNavigationFactory',
),
),
“导航”=>数组(
'默认'=>数组(
排列(
“标签”=>“主页”,
“路线”=>“主页”,
),
排列(
“标签”=>“胶片”,
“路线”=>“电影”,
),
排列(
“标签”=>“管理员”,
“路由”=>“管理”,
),
),
“adminnav”=>数组(
排列(
“标签”=>“hinzufügen电影”,
“路线”=>“添加电影”,
),
排列(
“标签”=>“Buch hinzufügen”,
'路线'=>'添加书本',
),
),
),
);
管理导航工厂 (module/Application/src/Application/Navigation/Service/AdminNavigationFactory.php)

名称空间应用程序\导航\服务;
使用Zend\Navigation\Service\DefaultNavigationFactory;
类AdminNavigationFactory扩展了DefaultNavigationFactory
{
受保护的函数getName()
{
返回“adminnav”;
}
} 
也许您想在整个应用程序的上下文中签出代码,下面是指向my github的链接:

  • 问候,,
    Sascha

    我现在遇到了完全相同的问题,您解决了吗?不幸的是,我无法让它工作。我最终使用了一个视图助手,它根据用户的角色返回正确的菜单。我让它工作了。我的问题是,我把AdminNavigationFactory.php放在目录/module/Admin/src/Navigation/Service/中,正确的目录是/module/Admin/src/Admin/Navigation/Service/。我希望你也能让它工作。