Контроллер 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 без сервисного локатора?

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

2

Решение

его пока пока сервисный локатор в 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,
],
7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]