1

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

module.config.php

'navigation' => array(
    'admin' => array(
        array(
            'label' => 'Admin Home',
            'route' => 'adminhome',
        ),
    ),
    'default' => array(
        array(
            'label' => 'Home',
            'route' => 'home',
        ),
    ),
),

AdminNavigationFactory.php

namespace Application\Navigation\Service;
use Zend\Navigation\Service\DefaultNavigationFactory;

class AdminNavigationFactory extends DefaultNavigationFactory
{
    protected function getName()
    {
        return 'admin';
    }
}

Module.php

public function getServiceConfig()
{
    return array(
        'factories' => array(
            'admin_navigation' => 'Application\Navigation\Service\AdminNavigationFactory',
        ),
    );
}

layout.phtml

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

我得到了错误。

Fatal error: Uncaught exception 'Zend\ServiceManager\Exception\ServiceNotCreatedException' with message 'While attempting to create adminnavigation(alias: admin_navigation) an invalid factory was registered for this instance type.' in /Applications/MAMP/htdocs/myapp/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php on line 987

如果我将 layout.phtml 更改为使用默认菜单,一切都会按预期工作。

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

1 回答 1

0

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

所以我的管理导航现在如下所示:

模块.config.php

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

return array(
    // yada yada yada...
    'service_manager' => array(
        'factories' => array(
            'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory',
            'adminnav' => 'Application\Navigation\Service\AdminNavigationFactory',
        ),
    ),
    'navigation'      => array(
        'default' => array(
            array(
                'label' => 'Home',
                'route' => 'home',
            ),
            array(
                'label' => 'Filme',
                'route' => 'movies',
            ),
            array(
                'label' => 'Admin',
                'route' => 'admin',
            ),
        ),
        'adminnav' => array(
            array(
                'label' => 'Film hinzufügen',
                'route' => 'add-movie',
            ),
            array(
                'label' => 'Buch hinzufügen',
                'route' => 'add-book',
            ),
        ),
    ),
);

AdminNavigationFactory

(模块/Application/src/Application/Navigation/Service/AdminNavigationFactory.php)

namespace Application\Navigation\Service;

use Zend\Navigation\Service\DefaultNavigationFactory;

class AdminNavigationFactory extends DefaultNavigationFactory
{
    protected function getName()
    {
        return 'adminnav';
    }
} 

也许你想在整个应用程序的上下文中查看代码,所以这里是我的 github 的链接:

  1. AdminNavigationFactory
  2. 模块.config.php

问候,萨沙

于 2014-11-09T09:25:42.827 回答