2017-01-03 3 views
1

Hallo Ich versuche zu laufen This Blog Example So habe ich alle Schritte, die dieses Tutorial sagte, aber jetzt bekomme ich diesen Fehler: Nach dem Erstellen der Factory-KlasseZF2 - 1 abstrakte Methode und muss daher abstrakt erklärt werden oder implementieren Sie die

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 D:\xampp\htdocs\zend2test\module\Blog\src\Blog\Factory\ListControllerFactory.php on line 28

Hier ist meine Fabrik Klasse:

// 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); 
    } 
} 

Wie kann ich dieses Problem beheben?

Antwort

2

Die FactoryInterface Sie verwenden erstreckt sich eine andere Schnittstelle:

FactoryInterface extends Factory\FactoryInterface.

Und das interface erklärt die __invoke Methode. Damit Ihre Klasse konform ist, müssen Sie sowohl createService als auch __invoke implementieren.

Erklären Sie auch die __invoke Methode. Z.B.

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); 
    } 

Auch fügen Sie die Zeile:

use Interop\Container\ContainerInterface; 

Zu Beginn der Datei (mit der anderen "Verwendung" Aussagen)

+0

dank @yivi für Antwort, aber nach dem Hinzufügen ** __ aufrufen () ** jetzt gibt es das ----> 'Fataler Fehler: Deklaration von Blog \ Factory \ ListControllerFactory :: __ invoke() muss kompatibel sein mit Zend \ ServiceManager \ Factory \ FactoryInterface :: __ (Container Interop \ Container \ ContainerInterface $ aufrufen , $ requestedName, Array $ options = NULL) ' –

+0

Entschuldigung. Probieren Sie es jetzt. – yivi

+0

Ich habe das schon ausprobiert aber gleicher Fehler –

Verwandte Themen