1

特定のユーザー ロールに基づいてアプリケーションで使用する複数のナビゲーション メニューを作成しようとしています。コードの大部分は zfc-admin に似ています。アプリケーションで zfc-admin を使用すると、管理者メニューを表示できますが、約 4 つのロールが必要になるため、これをアプリケーション モジュールに配置することにしました。

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 に移動した後、機能しました。

したがって、私の管理ナビゲーションは次のように機能するようになりました。

module.config.php

(モジュール/管理者/構成/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',
            ),
        ),
    ),
);

管理者ナビゲーション ファクトリ

(モジュール/アプリケーション/src/アプリケーション/ナビゲーション/サービス/AdminNavigationFactory.php)

namespace Application\Navigation\Service;

use Zend\Navigation\Service\DefaultNavigationFactory;

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

アプリケーション全体のコンテキストでコードを確認したい場合があるので、ここに私の github へのリンクを示します。

  1. 管理者ナビゲーション ファクトリ
  2. module.config.php

よろしく、サシャ

于 2014-11-09T09:25:42.827 に答える