在使用Laminas\Db\TableGateway\TableGateway类执行插入到实际表之前,我试图操作数据集。其目的是强制设置某些字段,如created_by和created_on,以确保该值在整个应用程序中是一致的。示例:
$dataset['created_by'] = App::getUserId();
$dataset['created_on'] = new \DateTime(); // This is just example as Laminas won't accept DateTime object for DateTime field and requires the string format instead. But i suppose you got the point.请理解,我可以使用Laminas\Db\TableGateway\Feature\EventFeature\TableGatewayEvent将事件侦听器附加到TableGateway,而我所附加的监听器在“preInsert”事件期间确实会触发。但是,我无法找到一种方法来操作包含要插入的数据集的Laminas\Db\Sql\Insert。
$eventManager = new \Laminas\EventManager\EventManager();
$eventManager->attach("preInsert", function (\Laminas\Db\TableGateway\Feature\EventFeature\TableGatewayEvent $event) {
/**
* @var \Laminas\Db\Sql\Insert
*/
$insertObject = $event->getParam("insert");
var_dump($insertObject->getRawState());
});
$feature = new \Laminas\Db\TableGateway\Feature\EventFeature($eventManager);
$table = new \Laminas\Db\TableGateway\TableGateway("test_table", $adapter, $feature);
$table->insert(array(
"name" => "hello",
"description" => "world",
"created_by" => NULL,
"created_on" => NULL
));上面的代码片段可以工作,回调函数确实会被触发。我可以考虑执行preInsert操作的另一种方法,例如扩展类,但我认为这并不符合Laminas框架的意图。
如有任何建议,将不胜感激。
发布于 2022-05-24 05:47:41
在使用Laminas\Db\Sql\Insert对象时,您似乎可以将值直接赋值为普通对象属性。
在我的例子中,它只是这样设置属性。
$insertObject->created_by = 1000;
$insertObject->created_on = "2022-03-15 05:06:07";成为
$eventManager = new \Laminas\EventManager\EventManager();
$eventManager->attach("preInsert", function (\Laminas\Db\TableGateway\Feature\EventFeature\TableGatewayEvent $event) {
/**
* @var \Laminas\Db\Sql\Insert
*/
$insertObject = $event->getParam("insert");
$insertObject->created_by = 1000;
$insertObject->created_on = "2022-03-15 05:06:07";
var_dump($insertObject->getRawState());
});
$feature = new \Laminas\Db\TableGateway\Feature\EventFeature($eventManager);
$table = new \Laminas\Db\TableGateway\TableGateway("test_table", $adapter, $feature);
$table->insert(array(
"name" => "hello",
"description" => "world",
"created_by" => NULL,
"created_on" => NULL
));https://stackoverflow.com/questions/72357647
复制相似问题