Контроллер Zf3 не может получить доступ к таблице классов модели, расположенной в другом модуле

Я новичок в Zend Framework. Есть ли способ получить доступ к таблице классов моделей, которая находится в другом модуле с моего активного контроллера? Поскольку его байтовый сервисный локатор в ZF3 я не могу получить доступ к таблице классов модели, расположенной в других модулях.

Ранее в контроллере ZF2

private configTable; public function getConfigTable() { if (!$this->configTable) { $sm = $this->getServiceLocator(); $this->configTable = $sm->get('Config\Model\ConfigTable'); // <-- HERE! } return $this->configTable; } public function indexAction(){ $allConfig = $this->getConfigTable()->getAllConfiguration(); ...... } 

Поскольку локатора обслуживания было достаточно, чтобы вызвать функцию от контроллера к классу модели, находящемуся в другом модуле. Есть ли способ добиться чего-то подобного в ZF3 без локатора сервисов?

Спасибо заранее, ребята. До свидания!

    его служебный локатор обслуживания в ZF3

    Локатор службы не был удален из ZF3. Однако новая версия фреймворка внесла некоторые изменения, которые нарушат существующий код, если вы полагаетесь на ServiceLocatorAwareInterface и / или имеете диспетчер служб, введенный в ваши контроллеры / службы.

    В ZF2 Контроллер действий по умолчанию реализовал этот интерфейс и разрешил разработчикам получать диспетчер сервисов из контроллера, как и в вашем примере. Более подробную информацию об изменениях в руководстве по миграции вы можете найти.

    Рекомендуемое решение для этого – разрешить все зависимости вашего контроллера на фабрике услуг и вставить их в конструктор.

    Во-первых, обновите контроллер.

     namespace Foo\Controller; use Config\Model\ConfigTable; // assuming this is an actual class name class FooController extends AbstractActionController { private $configTable; public function __construct(ConfigTable $configTable) { $this->configTable = $configTable; } public function indexAction() { $config = $this->configTable->getAllConfiguration(); } // ... } 

    Затем создайте новую фабрику услуг, которая будет вводить зависимость конфигурации таблицы в контроллер (используя новый заводский интерфейс ZF3 )

     namespace Foo\Controller; use Foo\Controller\FooController; use Interop\Container\ContainerInterface; use Zend\ServiceManager\FactoryInterface; class FooControllerFactory implements FactoryInterface { public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { $configTable = $container->get('Config\Model\ConfigTable'); return new FooController($configTable); } } 

    Затем обновите конфигурацию, чтобы использовать новую фабрику.

     use Foo\Controller\FooControllerFactory; 'factories' => [ 'Foo\\Controller\\Foo' => FooControllerFactory::class, ],