Здравствуйте! У меня в зенде есть два модуля. Один работает как положено, а вот со вторым проблема. Выдает такую ошибку.
Unable to resolve service "Shop\Service\ProductManager" to a factory; are you certain you provided it during configuration?
В фабрике контроллера, в фабрике ProductManager.php в самом контроллере, в конфигах все идентично, с работающим модулем, за исключением пространства имен. Почему он мне выкидывает исключение понять не могу.
На всякий случай показываю код
IndexController.php
<?php
namespace Shop\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Shop\Entity\Category;
use Shop\Entity\Products;
use Zend\View\Model\ViewModel;
use DoctrineORMModule\Paginator\Adapter\DoctrinePaginator as DoctrineAdapter;
use Doctrine\ORM\Tools\Pagination\Paginator as ORMPaginator;
use Zend\Paginator\Paginator;
class IndexController extends AbstractActionController
{
/**
* Менеджер сущностей.
* @var Doctrine\ORM\EntityManager
*/
protected $entityManager;
/**
* Менеджер продуктов.
* @var Shop\Service\ProductManager
*/
protected $productManager;
// Метод конструктора, используемый для внедрения зависимостей в контроллер.
public function __construct($entityManager, $productManager)
{
$this->entityManager = $entityManager;
$this->productManager = $productManager;
}
public function indexAction()
{
$categories = $this->entityManager->getRepository(Category::class)
->getAllMainCatsWithChildren();
$queries = $this->entityManager->getRepository(Products::class)
->findAllProductsWithCategory();
$files = $this->productManager->getImagePathByName($queries->getImage());
$page = $this->params()->fromQuery('page', 1);
$adapter = new DoctrineAdapter(new ORMPaginator($queries, false));
$paginator = new Paginator($adapter);
$paginator->setDefaultItemCountPerPage(6);
$paginator->setCurrentPageNumber($page);
// Визуализируем шаблон представления.
return new ViewModel([
'categories' => $categories,
'products' => $paginator,
]);
}
}
IndexControllerFactory.php
<?php
namespace Shop\Controller\Factory;
use Interop\Container\ContainerInterface;
use Zend\ServiceManager\Factory\FactoryInterface;
use Shop\Service\ProductManager;
use Shop\Controller\IndexController;
/**
* Это фабрика для IndexController. Ее целью является инстанцирование
* контроллера.
*/
class IndexControllerFactory implements FactoryInterface
{
public function __invoke(ContainerInterface $container,
$requestedName, array $options = null)
{
$productManager = $container->get(ProductManager::class);
$entityManager = $container->get('doctrine.entitymanager.orm_default');
// Инстанцируем контроллер и внедряем зависимости.
return new IndexController($entityManager, $productManager);
}
}
Интерпритатор ругается на эту строку
$productManager = $container->get(ProductManager::class);
Что в ней не так понятия не имею, как я уже говорил в другом модуле все работает нормально.
module.config.php
<?php
namespace Shop;
use Zend\ServiceManager\Factory\InvokableFactory;
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
use Zend\Router\Http\Segment;
return [
'controllers' => [
'factories' => [
Controller\IndexController::class => Controller\Factory\IndexControllerFactory::class,
Controller\ProductController::class => Controller\Factory\ProductControllerFactory::class,
],
],
'service_manager' => [
'factories' => [
Service\ProductManager::class => Service\Factory\ProductManagerFactory::class,
],
],
ProductManager.php
<?php
namespace Shop\Service;
use Shop\Entity\Products;
// Сервис The ProductManager.
class ProductManager
{
/**
* Doctrine entity manager.
* @var Doctrine\ORM\EntityManager
*/
protected $entityManager;
// Конструктор, используемый для внедрения зависимостей в сервис.
public function __construct($entityManager)
{
$this->entityManager = $entityManager;
}
ProductManagerFactory.php
<?php
namespace Shop\Service\Factory;
use Interop\Container\ContainerInterface;
use Zend\ServiceManager\Factory\FactoryInterface;
use Shop\Service\ProductManager;
/**
* Это фабрика для PostManager. Ее целью является
* инстанцирование сервиса.
*/
class ProductsManagerFactory implements FactoryInterface
{
public function __invoke(ContainerInterface $container,
$requestedName, array $options = null)
{
$entityManager = $container->get('doctrine.entitymanager.orm_default');
// Инстанцируем сервис и внедряем зависимости.
return new ProductManager($entityManager);
}
}
Народ , кто сталкивался с подобным подскажите!!!