gpt4 book ai didi

php - 如果我在 symfony2 中创建自定义事件,我如何访问实体管理器

转载 作者:行者123 更新时间:2023-12-02 07:40:29 25 4
gpt4 key购买 nike

我已经创建了自定义事件,例如当用户生成时,事件调度程序将触发该事件。

我正在关注 this tutorial .我想知道在他的 class CommentListener 中我如何访问实体管理器,因为我想在数据库中保留一些东西。

类是这样的:

class CommentListener
{
protected $mailer;

public function __construct(Swift_Mailer $mailer)
{
$this->mailer = $mailer;
}

public function onCommentEvent(CommentEvent $event)
{
$post = $event->getPost();
$comment = $event->getComment();

foreach ($post->getSubscribers() as $subscriber) {
$message = Swift_Message::newInstance()
->setSubject('New comment posted on ' . $post->getTitle())
->setFrom('send@example.com')
->setTo($subscriber->getEmail())
->setBody("Hey, somebody left a new comment on a post you're subscribed to! It says: " . $comment->getBody())
;
$this->mailer->send($message);
}
}
}

那么如何在 onCommentEvent 中访问实体管理器呢?

最佳答案

监听器是正常的服务。您可以将它与 mailer 一起注入(inject)到构造函数中。沿着这些线的东西:

服务:

services:
foo_bundle.listener.comment:
class: FooVendorBarBundleEventListenerCommentListener
arguments:
mailer: "@mailer"
entityManager: "@doctrine.orm.entity_manager"
tags:
- { name: kernel.event_listener, event: foo_bundle.post.comment_added, method: onCommentEvent }

监听类:

class CommentListener
{
protected $mailer;

protected $entityManager;

public function __construct(Swift_Mailer $mailer, $entityManager)
{
$this->mailer = $mailer;
$this->entityManager = $entityManager;
}

...

如果您需要找出特定服务的名称,请运行 php app/console container:debug

关于php - 如果我在 symfony2 中创建自定义事件,我如何访问实体管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11771368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com