注册后发送包含登录和通过的电子邮件

Kar*_*mar 2 symfony fosuserbundle

我目前正在开发一个用于管理用户的Symfony2项目我安装了FosUserBundle软件包,该软件包功能正常,但我找不到如何在创建用户后立即发送包含用户名和密码的电子邮件,因为我说我有两个用户:admin和user类型,管理员将创建具有FOS注册形式的创建形式的用户,在两种用户之间切换只是角色.

qoo*_*mao 7

您可以使用EventDispatcher自己的电子邮件挂钩并发送自己的电子邮件,而不是FOSUserBundle生成的电子邮件Listener.

class EmailConfirmationListener implements EventSubscriberInterface
{
    private $mailer;
    private $router;
    private $session;

    public function __construct(MailerInterface $mailer,
            UrlGeneratorInterface $router)
    {
        $this->mailer = $mailer;
        $this->router = $router;
    }

    public static function getSubscribedEvents()
    {
        return array(
            FOSUserEvents::REGISTRATION_SUCCESS => array(
                array('onRegistrationSuccess',  -10),
            ),
        );
    }

    public function onRegistrationSuccess(FormEvent $event)
    {
        /** @var $user \FOS\UserBundle\Model\UserInterface */
        $user = $event->getForm()->getData();

        // send details out to the user
        $this->mailer->sendCreatedUserEmail($user);

        // Your route to show the admin that the user has been created
        $url = $this->router->generate('blah_blah_user_created');
        $event->setResponse(new RedirectResponse($url));

        // Stop the later events propagting
        $event->stopPropagation();
    }
}
Run Code Online (Sandbox Code Playgroud)

邮件服务

use FOS\UserBundle\Model\UserInterface;
use FOS\UserBundle\Mailer\Mailer as BaseMailer;

class Mailer extends BaseMailer
{
    /**
     * @param UserInterface $user
     */
    public function sendAdminConfirmationEmailMessage(UserInterface $user)
    {
        /**
         * Custom template using same positioning as
         * FOSUSerBundle:Registration:email.txt.twig so that the sendEmailMessage
         * method will break it up correctly
         */
        $template = 'BlahBlahUser:Admin:created_user_email.txt.twig';
        $url = $this->router->generate('** custom login path**', array(), true);
        $rendered = $this->templating->render($template, array(
            'user' => $user,
            'password' => $user->getPlainPassword(),
        ));
        $this->sendEmailMessage($rendered,
            $this->parameters['from_email']['confirmation'], $user->getEmail());
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为会这样做..虽然我可能是错的.