Artist エンティティと単純な User エンティティがあります。
私のウェブサイトでは 2 つの登録が可能です。1 つはアーティスト用、もう 1 つは一般ユーザー用です。ユーザーはすべて正常に動作し、確認メールなどを受け取ります。うまく機能しますが、今回は、アーティストが私の Web サイトに登録するときに (アーティストが Web サイトのユーザーとしても登録されるように、FosUserBundle の UserType を埋め込みます)。 )、入力された電子メールの有効性を確認してからユーザーを有効にするための電子メール確認は、単純なユーザーのように送信されません。
アーティスト登録のために呼び出されるアクションは、FosUserBundle の RegistrationController の registerAction ではなく、ArtistController のアクション newAction であるため、これが発生していないことはわかっています。
そこで、RegistrationController と RegistrationFormHandler のいくつかのコードを使用しようとしましたが、ArtistHandler 内のメーラー インターフェイスやトークン ジェネレーターなどを使用することができないため、機能させることができません。
ここに私のArtistHander.phpがあります
<?php
namespace My\Bundle\BrocBundle\Form;
use Symfony\Component\Form\Form;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManager;
use My\Bundle\BrocBundle\Entity\Artist;
use FOS\UserBundle\Mailer\Mailer;
use FOS\UserBundle\Util\TokenGenerator;
class ArtistHandler
{
protected $form;
protected $request;
protected $em;
public function __construct(Form $form, Request $request, EntityManager $em, Mailer $mailer, TokenGenerator $tokenGenerator)
{
$this->form = $form;
$this->request = $request;
$this->em = $em;
$this->mailer = $mailer;
$this->tokenGenerator = $tokenGenerator;
}
public function process()
{
if ($this->request->getMethod() == 'POST')
{
$this->form->bindRequest($this->request);
if ($this->form->isValid() )
{
$this->onSuccess($this->form->getData());
return true;
}
}
return false;
}
public function onSuccess(Artist $artist)
{
$user = $artist->getUser();
$user->setEnabled(false);
if (null === $user->getConfirmationToken())
{
$user->setConfirmationToken($this->tokenGenerator->generateToken());
}
$this->mailer->sendConfirmationEmailMessage($user);
$this->userManager->updateUser($user);
$this->em->persist($artist);
$this->em->flush();
}
}