我正在尝试使用 FOSUserBundle 实现注册。我希望管理员能够注册一个新用户,我只需将注册更改为防火墙路由(/admin/register 前缀)即可。
我创建了一个自定义注册表单类型并按照此处的说明将其注册为服务:https ://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md
然后我基于此连接到注册事件:https ://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/controller_events.md
我的听众看起来像这样:
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class RegistrationListener implements EventSubscriberInterface
{
private $router;
public function __construct(UrlGeneratorInterface $router)
{
$this->router = $router;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_COMPLETED => 'onRegisterDone',
FOSUserEvents::REGISTRATION_CONFIRMED => 'onRegisterDone',
FOSUserEvents::RESETTING_RESET_COMPLETED => 'onRegisterDone',
);
}
public function onRegisterDone(FilterUserResponseEvent $event)
{
$url = $this->router->generate('admin_panel');
//$event->setResponse(new RedirectResponse($url));
}
}
FilterUserResponseEvent 没有 setResponse 方法,所以我只是让它运行。我认为订阅此事件会覆盖默认的 FOS\UserBundle\EventListener\AuthenticationListener 订阅事件并阻止用户登录,但新用户仍会登录。
是否可以阻止身份验证,或者我应该只是创建一个新表单来调用操作来调用用户管理器?