@T_verdisla_V
Начинающий

Почему выходит данная ошибка?

Здравствуйте! У меня в зенде есть два модуля. Один работает как положено, а вот со вторым проблема. Выдает такую ошибку.
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);
    }
}

Народ , кто сталкивался с подобным подскажите!!!
  • Вопрос задан
  • 464 просмотра
Пригласить эксперта
Ответы на вопрос 1
@T_verdisla_V Автор вопроса
Начинающий
Извиняюсь, нашел причину, была опечатка в ProductsManagerFactory, а должно было быть ProductManagerFactory
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы