2017-03-05 2 views
0

Ich bin neu in ZF2. Nachdem ich einige Tage lang versucht hatte, herauszufinden, wie all diese Dinge funktionieren sollten, war ich nicht in der Lage herauszufinden, wie ich TableGateway Model vom Service aus anrufen sollte.Zend Framework 2 Anruf TableGateway in Service

So habe ich Controller:

class SubscriberController extends AbstractActionController 
{ 
/** 
* @var \Subscriber\Service\SubscriberServiceInterface 
*/ 
private $subscriberService; 

/** 
* @param $subscriberService 
*/ 
public function __construct(SubscriberServiceInterface $subscriberService) 
{ 
    $this->subscriberService = $subscriberService; 
} 

Factroy für diesen Controller:

class SubscriberControllerFactory implements FactoryInterface 
{ 
/** 
* Returns ArchiveController instance. 
* 
* @param ServiceLocatorInterface $serviceLocator 
* @return SubscriberController 
* @override 
**/ 
public function createService(ServiceLocatorInterface $serviceLocator) 
{ 
    $sm = $serviceLocator->getServiceLocator(); 

    return new SubscriberController(
     $sm->get('Subscriber\Service\SubscriberServiceInterface') 
    ); 
} 

Einige SubscriberTable:

class SubscriberTable 
{ 
protected $tableGateway; 

public function __construct(TableGateway $tableGateway) 
{ 
    $this->tableGateway = $tableGateway; 
} 

public function fetchAll() 
{ 
    $resultSet = $this->tableGateway->select(); 
    return $resultSet; 
} 

und Service, in dem ich SubscriberTable Instanz zu bekommen und machen etwas Logik. Aber ich kann nicht herausfinden, wie soll ich diese Instanz in SubscriberService anrufen und legen Sie die DbAdapter für SubscriberTable

Antwort

1
First implement servicelocator interface and define get and set locator functions to your service like this. 

    use Zend\ServiceManager\ServiceLocatorAwareInterface; 
    use Zend\ServiceManager\ServiceLocatorInterface; 

    class Yourservice implements ServiceLocatorAwareInterface{ 

    function test(){ 
     $this->getSubscriberTable->fetchAll(); // call to subscriber table functions 
    }  

    /** 
    * @table gateway Call 
    **/ 
    public function getSubscriberTable() 
    { 
     if (!$this->SubscriberTable) { 
      $sm = $this->getServiceLocator(); 
      $this->SubscriberTable = $sm->get('Application\Model\SubscriberTable'); 
     } 
     return $this->SubscriberTable; 
    } 

    public function setServiceLocator(ServiceLocatorInterface $serviceLocator) 
    { 
     $this->serviceLocator = $serviceLocator; 
    } 

    public function getServiceLocator() 
    { 
     return $this->serviceLocator; 
    } 
} 

Hoffe, es wird Ihnen helfen.