ZF2 - 1抽象方法因此必须声明为抽象或实现

时间:2017-01-03 09:48:40

标签: php zend-framework2

您好我试图运行This Blog Example所以我有本教程所说的每一步,但现在我收到此错误:创建工厂类后

  

致命错误:类Blog \ Factory \ ListControllerFactory包含1   因此,抽象方法必须声明为抽象或实现   其余的方法   (Zend \ ServiceManager \ Factory \ FactoryInterface :: __ invoke)中   d:\ XAMPP \ htdocs中\ zend2test \模块\博客的\ src \博客\厂\ ListControllerFactory.php   在第28行

这是我的工厂类:

// 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
 {

    private $serviceLocator;
     /**
      * 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);
     }
 }

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

The FactoryInterface上的点击事件扩展了另一个界面:

FactoryInterface extends Factory\FactoryInterface

interface声明了__invoke方法。因此,要使您的课程符合规定,您需要同时实施 createService __ invoke

还声明__invoke方法。 E.g。

public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        // get your dependency
        $postService = $container->get('Blog\Service\PostServiceInterface');
        // inject it int the constructor
        return new ListController($postService);
    }

另外,添加以下行:

use Interop\Container\ContainerInterface;

在您的文件的开头(与您的其他"使用"语句)