Как выполнить предварительный выбор в zf2 - PullRequest
0 голосов
/ 08 мая 2018

У меня есть AbstractTableGateway, как это:

class FundsTable extends AbstractTableGateway
{

protected $table = 'tb_funds';

public function __construct(AdapterInterface $adapter)
{
    $this->adapter = $adapter;
    $this->resultSetPrototype = new HydratingResultSet(new FundsHydrator(), new Fund());
    $this->initialize();
}

public function fetchAll($year)
{
    $select = new Select(array("f" => $this->table));
    $resultSet = $this->selectWith($select);
    $resultSet->initialize($resultSet->toArray());
    return $resultSet;
}

}

И я хотел бы проверить что-то перед возвратом метода $resultSet in fetchAll, но у меня есть много этих методов, и я не хочу ставить if или где в каждом из них, хотел бы сделать функция отсоединена от класса, я попытался использовать EventFeature из TableGateway, но, как правило, отсутствие документации об этом.

У вас, ребята, были какие-нибудь предложения?

Спасибо

1 Ответ

0 голосов
/ 09 мая 2018

Я нашел способ сделать это,

В модели просто добавьте функцию EventFeature к конструкции:

$this->featureSet = new FeatureSet();
$this->featureSet->addFeature(new EventFeature());

И тогда в вашем Module.php вам нужно будет создать SharedEventManager. Это потому, что когда модель создает экземпляр EventFeature, это создает новый EventManager внутри этого, в отличие от EventManager, который Zend создает в начальной загрузке, поэтому вам просто нужно создать это и прикрепить следующее событие :

public function onBootstrap(MvcEvent $event)
{
  $eventManager = $event->getApplication()->getEventManager();
  $sharedEventManager = $eventManager->getSharedManager();

  $sharedEventManager->attach(
        'Zend\Db\TableGateway\TableGateway',
        EventFeature::EVENT_PRE_SELECT,
        function (EventFeature\TableGatewayEvent $e) {
            //Do stuff here or call some method
  });
}
...