特定のユーザー ロールに基づいてアプリケーションで使用する複数のナビゲーション メニューを作成しようとしています。コードの大部分は 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(); ?>