у меня есть 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
в fetchAll
метод, но у меня есть много этих методов, и я не хочу помещать if или a в каждом из них, хотел бы сделать функцию отсоединенной от класса, я пытался использовать EventFeature
из TableGateway
но причина в отсутствии документации по этому поводу.
Ребята, у вас есть предложения?
Спасибо
Я нашел способ сделать это,
В модель просто добавьте 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
});
}
Других решений пока нет …