Zend Framework 2 вызывает TableGateway в Сервисе
Я новичок в ZF2. После нескольких дней попыток выяснить, как все эти вещи должны работать, я не смог понять, как мне вызвать TableGateway Model из сервиса.
Итак, у меня есть контроллер:
class SubscriberController extends AbstractActionController
{
/**
* @var \Subscriber\Service\SubscriberServiceInterface
*/
private $subscriberService;
/**
* @param $subscriberService
*/
public function __construct(SubscriberServiceInterface $subscriberService)
{
$this->subscriberService = $subscriberService;
}
Фактрой для этого Контроллера:
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')
);
}
Некоторые SubscriberTable:
class SubscriberTable
{
protected $tableGateway;
public function __construct(TableGateway $tableGateway)
{
$this->tableGateway = $tableGateway;
}
public function fetchAll()
{
$resultSet = $this->tableGateway->select();
return $resultSet;
}
И Сервис, в котором я хочу получить экземпляр SubscriberTable и сделать некоторую логику. Но я не могу понять, как я должен вызвать этот экземпляр в SubscriberService и установить DbAdapter для SubscriberTable
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;
}
}
Надеюсь, это поможет вам.