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 Media Bundle -- 上传图片时出错
sonata AdminBlockServiceInterface 弃用,以明确安装 symfony 2.8 + sonata 3.10