1

我收到错误:

Fatal error: Class Blog\Factory\ListControllerFactory contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Zend\ServiceManager\Factory\FactoryInterface::__invoke) in /d0/home/kgendig/www/Zend/module/Blog/src/Blog/Factory/ListControllerFactory.php on line 28

我正在使用 https://framework.zend.com/manual/2.4/en/in-depth-guide/services-and-servicemanager.html

我必须改变的,我的 zend_version(); 是 2.6.0

<?php
// Filename: /module/Blog/src/Blog/Factory/ListControllerFactory.php
namespace Blog\Factory;

use Blog\Controller\ListController;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class ListControllerFactory implements FactoryInterface
{
    /**
     * Create service
     *
     * @param ServiceLocatorInterface $serviceLocator
     *
     * @return mixed
     */
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $realServiceLocator = $serviceLocator->getServiceLocator();
        $postService        = $realServiceLocator->get('Blog\Service\PostServiceInterface');

        return new ListController($postService);
    }
}
4

1 回答 1

1

你的ListControllerFactory类实现了FactoryInterface. 所以你必须在你的类中定义这个接口的所有抽象函数。在这里,您FactoryInterface需要__invoke()方法(检查您如何调用它),因此您必须在ListControllerFactory.

看来您正在混合 ZF2/3 组件。在 ZF3FactoryInterface代码中(参见此处),您有从 V2 升级到 V3 的说明:

如果从 v2 升级,请执行以下步骤:

  • 将方法重命名createService()__invoke(), 并且:
  • $serviceLocator参数重命名为$container,并将类型提示更改为Interop\Container\ContainerInterface
  • 添加$requestedName作为第二个参数
  • 添加可选array $options = null参数作为最终参数
  • 创建createService()此接口中定义的方法,并将其代理到__invoke().

这描述了如何解决您的问题,但您的代码中可能存在几个类似的问题。尽量不要混用 ZF2.4 和 ZF3 成分。不要dev-master在你的composer.json. 我建议你只使用 ZF2 组件和 ZF2 教程,或者,如果你想学习 ZF3,只使用 ZF3 组件和 ZF3 教程。

于 2016-09-27T09:42:26.227 回答