我正在使用FOSUserBundle,我希望默认情况下每个用户注册时都会被禁用。管理员将通过电话联系每个用户,如果合适,他将使用户处于活动状态。我已阅读有关覆盖默认FOSUserBundle控制器但我无法弄清楚如何使其工作。我在src / AppBundle / Controller / RegistrationController.php中使用此方法创建了RegistrationController.php:
database_creation
,但没有任何作用,也许我需要有人向我展示如何做到这一点,仅此而已。
答案 0 :(得分:1)
对于那些仍在努力解决此问题的人,请让观察者监听事件:fos_user.registration.initialize
像这样(适应您的代码路径):
app.listener.disable_registered_user:
class: AppBundle\Observer\DisableRegisteredUserListener
arguments:
- "@templating"
tags:
# split to multiple line for readability
# can be made into a single line like - { name: ..., event: ... , method: ... }
-
name: "kernel.event_listener"
event: "fos_user.registration.initialize"
method: "disableUser"
这就是事件侦听器类的内容:
namespace AppBundle\Observer;
use FOS\UserBundle\Event\GetResponseUserEvent;
/**
* Class DisableRegisteredUserListener
* @package AppBundle\Observer
*/
class DisableRegisteredUserListener
{
/**
* @param \FOS\UserBundle\Event\GetResponseUserEvent $event
*/
public function disableUser(GetResponseUserEvent $event)
{
$user = $event->getUser();
/** @var \AppBundle\Entity\User $user */
$user->setEnabled(false);
}
}
答案 1 :(得分:-1)
您可以只听取FOSUserEvents::REGISTRATION_CONFIRM
并再次禁用注册用户,然后再将其保留到数据库中。
由于FOSUserBundle会自动将新用户转发到需要用户登录的confirmedAction
,因此您需要提供自己的响应来覆盖此内容。
你的听众......
class DisableRegisteredUserListener
{
/**
* @var EngineInterface
*/
private $templating;
/**
* @var EngineInterface $templating
*/
public function __construct(EngineInterface $templating)
{
$this->templating = $templating;
}
/**
* @var GetResponseUserEvent $event
* @return null
*/
public function disableUser(GetResponseUserEvent $event)
{
$user = $event->getUser();
$user->setEnabled(false);
$response = $this->templating->renderResponse(
'AppBundle:Registration:registration_complete.html.twig',
array(
'user' => $user,
)
);
}
}
您的服务档案(YAML)......
services:
app.listener.disable_registered_user:
class: AppBundle\EventListener\DisableRegisteredUserListener
arguments:
- "@templating"
tags:
# split to multiple line for readability
# can be made into a single line like - { name: ..., event: ... , method: ... }
-
name: "kernel.event_listener"
event: "fos_user.registration.confirm"
method: "disableUser"
然后,您的AppBundle:Registration:registration_complete.html.twig
可用于告知新用户他们的帐户已创建但已停用,然后您的团队成员会联系他们以完成此过程。