如何在 zf2 中执行 pre select
How to perform a pre select in zf2
我有一个 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;
}
}
而且我想在 return $resultSet
in fetchAll
方法之前检查一些东西,但是我有很多这样的方法,不想放 if 或 where在他们每个人中,我想使一个函数与 class 解耦,我尝试使用 EventFeature
的 TableGateway
但 zend 缺少相关文档。
你们有什么建议吗?
谢谢
我找到了一种方法,
在模型中添加 EventFeature
构造特征:
$this->featureSet = new FeatureSet();
$this->featureSet->addFeature(new EventFeature());
然后在您的 Module.php
中,您需要创建一个 SharedEventManager
。这是因为当模型实例化 EventFeature
时,它会在其中创建一个 new EventManager
,不同于 Zend 在 [=26= 中创建的 EventManager
],因此您只需创建它并附加以下事件:
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
});
}
我有一个 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;
}
}
而且我想在 return $resultSet
in fetchAll
方法之前检查一些东西,但是我有很多这样的方法,不想放 if 或 where在他们每个人中,我想使一个函数与 class 解耦,我尝试使用 EventFeature
的 TableGateway
但 zend 缺少相关文档。
你们有什么建议吗?
谢谢
我找到了一种方法,
在模型中添加 EventFeature
构造特征:
$this->featureSet = new FeatureSet();
$this->featureSet->addFeature(new EventFeature());
然后在您的 Module.php
中,您需要创建一个 SharedEventManager
。这是因为当模型实例化 EventFeature
时,它会在其中创建一个 new EventManager
,不同于 Zend 在 [=26= 中创建的 EventManager
],因此您只需创建它并附加以下事件:
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
});
}