在Symfony2/Doctrine中插入記錄後觸發事件的最佳方式是什麼?Symfony2 - doctrine/orm上的聽衆
4
A
回答
10
首先,註冊一個服務作爲一種學說事件偵聽器:
app/config.yml
:
services:
foo.listener:
class: Vendor\FooBundle\BarClass
tags:
- { name: doctrine.event_listener, event: postPersist, method: onPostPersist }
然後在您的監聽器類,定義一個onPostPersist
方法(或任何你命名的配置的方法)需要Doctrine\ORM\Event\LifecycleEventArgs
參數:
public function onPostPersist(LifecycleEventArgs $eventArgs)
{
// do stuff with the entity here
}
請注意,你不能EntityManager實例傳遞給listene r類,因爲$ eventArgs包含對它的引用,這樣做會拋出CircularReferenceException。
1
嘗試注入容器本身而不是安全上下文。使用FOS_USER,security.context依賴於您的偵聽器(EM),您的偵聽器需要security.context。
<service id="foo.listener" class="%foo.listener.class%">
<argument type="service" id="service_container"/>
<tag name="doctrine.event_listener" event="postPersist" method="fooMethod" />
</service>
順便說一句,至少在XML,方法名似乎並不奏效,默認情況下它調用的方法「postPersist」代替,而忽略你給任何方法的名稱(fooMethod);請讓我知道,如果這是YAML配置的情況,或者我錯了。
相關問題
- 1. 的Symfony2/Doctrine2:管理聽衆
- 2. rallytextfield上的聽衆
- 3. jQuery的AJAX聽衆
- 4. Onclick Android的聽衆
- 5. 靜態聽衆
- 6. 多SeekBars聽衆
- 7. 處理聽衆
- 8. Java onclick聽衆
- 9. 不同郵箱上的聽衆
- 10. Symfony2當聽衆比服務更可取時?
- 11. 訪問從聽衆
- 12. Jetty9多個聽衆
- 13. Guice - 注入聽衆
- 14. android sim卡聽衆
- 15. Alertdialog多個聽衆
- 16. 聽衆c#像java
- 17. java MVC,多聽衆
- 18. Gspread - 更改聽衆?
- 19. JavaScript操作聽衆
- 20. Android Shift鍵聽衆
- 21. 的TableRow的onclick聽衆
- 22. 的Java Swing/JFrame的聽衆
- 23. 的Node.js - 聽時聽衆註冊
- 24. 在Hazelcast對象上獲取聽衆
- 25. 修改核心聽衆
- 26. 關於Java的聽衆
- 27. At.js的兩位聽衆
- 28. 觸發聽衆的祝酒
- 29. TestNG的聽衆:攔截@dataProvider
- 30. http請求php的聽衆
我正在做這個完全相同的事情,但我試圖在我的偵聽器中包含對securityContext對象的引用。我在我的yml文件中添加了:arguments:[「@ security.context」],但是當我將$ securityContext對象添加到我的構造函數中時,出現循環引用錯誤。有任何想法嗎?我正在使用FOSUserBundle,並在我收到的錯誤中顯示。 – Jeremy 2011-09-26 19:35:09
這是我收到的錯誤。 ServiceCircularReferenceException:檢測到服務「security.context」的循環引用,路徑:「profiler_listener - > profiler - > security.context - > security.authentication.manager - > fos_user.user_manager - > doctrine.orm.default_entity_manager - > doctrine.dbal。 default_connection - > my.listener「。 – Jeremy 2011-09-26 19:35:55