Symfony2、Sonata、UserBundle:当用户启用更新时发送电子邮件

Posted

技术标签:

【中文标题】Symfony2、Sonata、UserBundle:当用户启用更新时发送电子邮件【英文标题】:Symfony2, Sonata, UserBundle : Send email when user is enable on update 【发布时间】:2015-04-22 07:07:56 【问题描述】:

当管理员在 Sonata 管理面板中启用用户时,我希望能够向用户发送电子邮件。

我必须知道我应该覆盖或扩展哪个文件。

我想它类似于这个subject 或这个stack-overflow subject:

/**
 * @inheritdoc
 */
public function create($object)

    parent::create($object);

    // send welcome email to new user

我在管理包中找到了创建函数,但我想它不会仅被 UserBundle 覆盖。如果它确实是要走的路,我怎么能只为 UserBundle 指定?

关于信息,我在 UserBundle 中找不到任何创建或更新函数。仅在 AdminBundle 中。

【问题讨论】:

我会查看 EventListener,以避免在实体中进行此操作。 这似乎是个好主意。你有什么提示我会如何听那个特定的事件吗? 不,对不起,我不使用 SonataAdmin,我只有这个提示:P 使用事件是最好的方法,因为您可以在应用程序的任何地方重复使用它们。下面是一个使用 create 函数的例子:***.com/questions/21913356/… 【参考方案1】:

我将从我的要点涉及到合同事件: https://gist.github.com/webdevilopers/4eea317ade72a119a72e 使其适应您的需求。猜猜你可以简单地将“合同”重命名为“用户”。

然后在你的管理类的某处添加事件:

$event = new ContractEvent($contract);

$dispatcher = $this->get('event_dispatcher');
$dispatcher->dispatch(
    ContractEvents::CONTRACT_CREATED,
$event
); 

有关如何注入 SwiftMailer 的详细信息,请参阅要点。

您可以从 Sonata Admin 为您提供的活动中进行选择,而不是创建自己的活动: Admin's documentation - Reference - Events (master)

选择适合您需要的。

【讨论】:

非常感谢,这样更清楚:)。我一直在尝试从实际工作的 UserAdmin 中覆盖 PreUpdate 方法。但是您的解决方案似乎更干净。

以上是关于Symfony2、Sonata、UserBundle:当用户启用更新时发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2,Sonata MediaBundle:向表中添加新字段

Symfony2 - Sonata adminbundle 菜单不会显示

在 symfony2 sonata 管理包中设置默认值

Symfony2 覆盖 Sonata 媒体图像提供程序。(将接口传递给构造函数)

Symfony2 Sonata Media Bundle -- 上传图片时出错

sonata AdminBlockServiceInterface 弃用,以明确安装 symfony 2.8 + sonata 3.10