ZF3 представляет модуль блога, уверены ли вы, что предоставили его во время настройки

поэтому я пытаюсь изучить Zend Framework 3, и теперь я застреваю на этой ошибке несколько часов:

Unable to resolve service "Blog\Controller\ListController" to a factory; are 
you certain you provided it during configuration?

Учебное пособие, по которому я учусь: https://docs.zendframework.com/tutorials/in-depth-guide/models-and-servicemanager/

В учебнике в пункте «Написание фабричного класса» говорится, что это сообщение об ошибке ожидается, но в «Регистрация служб» оно должно быть исправлено, но это не так.

Мой модуль.config.php:

<?php 
namespace Blog;

use Zend\Config\Factory;
use Zend\Router\Http\Literal;
use Zend\ServiceManager\Factory\InvokableFactory;


return [

'service_manager' => [
    'aliases' => [
        Model\PostRepositoryInterface::class => Model\PostRepository::class,
    ],
    'factories' => [
        Model\PostRepository::class => InvokableFactory::class,
    ],
],
'controllers' => [
    'factories' => [
        // Update the following line:
        Controller\ListController::class => 
        Factory\ListControllerFactory::class,
    ],
],
'router' => [
    'routes' => [
        'blog' => [
            'type' => Literal::class,
            'options' => [
                'route' => '/blog',
                'defaults' => [
                    'controller' => Controller\ListController::class,
                    'action' => 'index',
                ],
            ],
        ],
    ],
],
'view_manager' => [
    'template_path_stack' => [
        __DIR__ . '/../view',
    ],
],

];

мой ListController.php:

namespace Blog\Controller;

use Blog\Model\PostRepositoryInterface;
use Zend\Mvc\Controller\AbstractActionController;

class ListController extends AbstractActionController
{
   /**
   * @var PostRepositoryInterface
   */
   private $postRepository;

   public function __construct(PostRepositoryInterface $postRepository)
   {
      $this->postRepository = $postRepository;
   }
}

person Kden    schedule 21.04.2017    source источник


Ответы (2)


На основании вашего кода в module.config.php должен существовать класс Factory\ListControllerFactory.

'controllers' => [
    'factories' => [
        // Update the following line:
        Controller\ListController::class => Factory\ListControllerFactory::class,
    ],
],

И из сообщений об ошибках это означает, что контроллер Blog\Controller\ListController не создан. Я думаю, потому что у меня нет фабричного класса.

Вы можете создать класс Blog\Controller\ListControllerFactory следующим образом:

<?php
namespace Blog\Controller;

use Zend\ServiceManager\Factory\FactoryInterface;
use Interop\Container\ContainerInterface;

class ListControllerFactory implements FactoryInterface
{
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        return new ListController($container->get(Blog\Model\PostRepository::class));
    }
}

Пожалуйста, попробуйте, я думаю, это поможет

person Dolly Aswin    schedule 24.04.2017
comment
Привет, Долли, во-первых, спасибо за ваш ответ и извините за опоздание. На самом деле я уже создал ListControllerFactory, но с другим возвратом: public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { return new ListController($container->get(PostRepositoryInterface::class)); } - person Kden; 02.05.2017
comment
Нет проблем, я думаю, что возврат был таким же. Поскольку вы получаете доступ, используя имя alias. Итак, вы все еще получили проблему? - person Dolly Aswin; 03.05.2017
comment
Да, все та же проблема. - person Kden; 03.05.2017
comment
@Kden, хм, если вы создали Factory и по-прежнему получаете ту же ошибку Unable to resolve service "Blog\Controller\ListController" to a factory; are you certain you provided it during configuration?, я просто думаю, что вам нужно обновить конфигурацию кеша. Просто удалите его, потому что он будет воссоздан, когда файл не существует rm data/cache/module-config-cache.application.config.cache.php - person Dolly Aswin; 03.05.2017
comment
Удалось ли вам решить эту проблему @Kden? Если да, то какое разрешение? - person Shraddha Banerjee; 24.01.2020

Пожалуйста, удалите строку:

use Zend\Config\Factory;

Пространство имен Factory конфликтует с этим классом.

person Majid Rafei    schedule 11.01.2020