我有一个艺术家实体和一个简单的用户实体。
在我的网站上可以进行 2 次注册:一种用于艺术家,另一种用于普通用户。用户一切正常,他收到一封确认电子邮件等。效果很好,但是这一次,当艺术家在我的网站上注册时(我嵌入了 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();
}
}