私は現在、ユーザーを管理するための Symfony2 プロジェクトに取り組んでいます 機能するバンドル FosUserBundle をインストールしましたが、ユーザーを作成した直後にユーザー名とパスワードを含む電子メールを送信する方法が見つかりません。タイプ、および FOS 登録の形式である作成形式でユーザーを作成するのは管理者であり、2 種類のユーザー間の変更はロールのみです。
質問する
8721 次
4 に答える
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();
}
}
メーラーサービス
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());
}
}
私はそれを行うと思います..私は間違っているかもしれませんが。
于 2013-07-20T12:02:15.377 に答える
3
バンドルのドキュメントに記載されています:
// src/Acme/UserBundle/Controller/RegistrationController.php
<?php
namespace Acme\UserBundle\Controller;
use Symfony\Component\HttpFoundation\RedirectResponse;
use FOS\UserBundle\Controller\RegistrationController as BaseController;
class RegistrationController extends BaseController
{
public function registerAction()
{
$form = $this->container->get('fos_user.registration.form');
$formHandler = $this->container->get('fos_user.registration.form.handler');
$confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled');
$process = $formHandler->process($confirmationEnabled);
if ($process) {
$user = $form->getData();
/*****************************************************
* Add new functionality (e.g. log the registration) *
*****************************************************/
$this->container->get('logger')->info(
sprintf('New user registration: %s', $user)
);
if ($confirmationEnabled) {
$this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail());
$route = 'fos_user_registration_check_email';
} else {
$this->authenticateUser($user);
$route = 'fos_user_registration_confirmed';
}
$this->setFlash('fos_user_success', 'registration.flash.user_created');
$url = $this->container->get('router')->generate($route);
return new RedirectResponse($url);
}
return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.'.$this->getEngine(), array(
'form' => $form->createView(),
));
}
}
于 2013-07-19T11:30:36.180 に答える
0
symfony2 を使用して登録後にユーザー名/電子メールとパスワードをユーザーに送信する方法は次のとおりです。
email.txt.twigを独自のバンドルにオーバーライドしてから、このメール本文を追加します。
{% block subject %}
Welcome to My Application
{% endblock %}
{% block body_html %}
Email : {{ user.email }}
Username : {{ user.username }}
Password : {{ user.plainPassword }}
Activation Link : {{confirmationUrl}}
{% endblock %}
次に、電子メールがユーザーの電子メールに送信され、電子メール、ユーザー名、パスワード、およびアカウントをアクティブ化するための有効化 URL が含まれます。
于 2015-01-12T11:17:57.647 に答える