0
可以處理postFlush事件或類似的事情嗎?我需要訪問新寄存器的一些數據來生成另一些東西,但必須在沖洗之後,因爲我使用Gedmo Slug和我需要的一個數據是slu。。SonataAdmin onComplete
可以處理postFlush事件或類似的事情嗎?我需要訪問新寄存器的一些數據來生成另一些東西,但必須在沖洗之後,因爲我使用Gedmo Slug和我需要的一個數據是slu。。SonataAdmin onComplete
是的,在你的services.yml/xml文件中創建一個監聽器,然後監聽器自己改變你需要的代碼。
#src/Acme/Bundle/YourBundle/Resources/config/services.yml
services:
contact_onflush.listener:
class: Acme\Bundle\YourBundle\Listener\YourListener
arguments: [@request_stack]
tags:
- { name: doctrine.event_listener, event: onFlush }
contact_postflush.eventlistener:
class: Acme\Bundle\YourBundle\Listener\YourListener
tags:
- { name: doctrine.event_listener, event: postFlush}
在監聽器類:
<?php
namespace Acme\YourBundle\YourListener;
use Doctrine\Common\EventArgs;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\OnFlushEventArgs;
use Doctrine\ORM\Event\PostFlushEventArgs;
use Symfony\Component\HttpFoundation\RequestStack;
class YourListener implements EventSubscriber
{
private $requestStack;
private $needsFlush;
public function __construct(Request $requestStack)
{
$this->requestStack= $requestStack;
$this->needsFlush= false;
}
public function onFlush(OnFlushEventArgs $args)
{
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
// we would like to listen on insertions and updates events
$entities = array_merge(
$uow->getScheduledEntityInsertions(),
$uow->getScheduledEntityUpdates()
);
foreach ($entities as $entity) {
// every time we update or insert a new [Slug entity] we do the work
if ($entity instanceof Slug) {
//modify your code here
$x = new SomeEntity();
$em->persist($x);
//other modifications
$this-needsFlush = true;
$uow->computeChangeSets();
}
}
}
public function postFlush(PostFlushEventArgs $eventArgs) {
if ($this->needsFlush) {
$this->needsFlush = false;
$eventArgs->getEntityManager()->flush();
}
}
您可以使用computeChangeSet(單數),但我使用它有問題。您可以使用preUpdate來查找已更改的字段,而不是使用onFlush,但在嘗試保留時此事件有限制,您需要將它與needFlush之類的內容配對以觸發postFlush。
如果您仍然有錯誤,您可以發佈更多的代碼來顯示您正在修改的內容嗎?
它很棒,但我需要更多的東西。我可以如何讓這個服務的主機名? –
您可以從請求或請求堆中獲取主機。我更新了代碼,並且需要在需要主機名的地方添加requestStack-> getHost()。 – George
甜!有用! Ty George! :)你真棒 –