ServiceNotCreatedException в Zend Framework 2 при попытке нескольких переходов
Я пытаюсь создать несколько навигационных меню для использования в моем приложении на основе определенной роли пользователя. Большая часть кода похожа на zfc-admin. Когда я использую zfc-admin в своем приложении, я могу вызвать меню администратора, однако у меня будет около четырех ролей, и я решил добавить это в свой модуль Application.
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(); ?>
1 ответ
Сначала я получил точно такой же вопрос. После перемещения фабричной конфигурации из метода getServiceConfig() в классе модуля в module.config.php все заработало.
Теперь моя админская навигация работает следующим образом:
module.config.php
(Модуль / Admin / конфигурации / 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 / Услуги / AdminNavigationFactory.php)
namespace Application\Navigation\Service;
use Zend\Navigation\Service\DefaultNavigationFactory;
class AdminNavigationFactory extends DefaultNavigationFactory
{
protected function getName()
{
return 'adminnav';
}
}
Может быть, вы хотите проверить код в контексте всего приложения, поэтому вот ссылки на мой github:
С уважением, Саша