Tôi đã làm theo hướng dẫn từ hướng dẫn này: http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html và đã tạo một trình nghe đơn giản, lắng nghe các sự kiện được Doctrine gửi đi khi chèn hoặc cập nhật thực thể. Các sự kiện preInsert và postInsert hoạt động tốt và được gửi đi khi tạo một thực thể mới. Tuy nhiên, preUpdate và postUpdate không bao giờ được gọi là cập nhật của thực thể cho dù là gì. Cũng vậy với onFlush. Là một lưu ý phụ, tôi có một bộ điều khiển tạo ra bộ điều khiển hỗ trợ các hoạt động CRUD cơ bản, và đã để nó bị ảnh hưởng.preUpdate và postUpdate sự kiện không được kích hoạt trên Doctrine 2
Dưới đây là một số đoạn mã để minh họa cách tôi đang thực hiện việc này.
config.yml
annotation.listener:
class: City\AnnotatorBundle\Listener\AnnotationListener
tags:
- { name: doctrine.event_listener, event: postUpdate}
Listener thực hiện (Tôi đã bỏ qua các chức năng khác và để lại chỉ postUpdate cho các mục đích đơn giản)
class AnnotationListener
{
public function postUpdate(LifecycleEventArgs $args)
{
$entity=$args->getEntity();
echo $entity->getId();
die;
}
}
id thực thể không bao giờ được hiển thị, và kịch bản tiếp tục thực hiện của nó cho đến khi nó hoàn tất, mặc dù chết ở cuối hàm.
đúng ... Tuy nhiên , Tôi phải sử dụng các thực thể khác và chính người quản lý thực thể, và có thể là các dịch vụ khác, vì vậy nó sẽ không là một ý tưởng hay. Dù sao, có vẻ như vấn đề đã được giải quyết ngay bây giờ. Tôi đã cập nhật lên phiên bản mới nhất của Symfony, xóa bộ nhớ cache và mọi thứ đang hoạt động. – tomor
À vâng, nếu bạn đang sử dụng các dịch vụ/tổ chức khác, điều đó có nghĩa là không đi theo cách này :) –