FOSUserbundle上默认禁用用户

时间:2016-01-17 23:04:47

标签: symfony fosuserbundle

我正在使用FOSUserBundle,我希望默认情况下每个用户注册时都会被禁用。管理员将通过电话联系每个用户,如果合适,他将使用户处于活动状态。我已阅读有关覆盖默认FOSUserBundle控制器但我无法弄清楚如何使其工作。我在src / AppBundle / Controller / RegistrationController.php中使用此方法创建了RegistrationController.php:

database_creation

,但没有任何作用,也许我需要有人向我展示如何做到这一点,仅此而已。

2 个答案:

答案 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并再次禁用注册用户,然后再将其保留到数据库中。

由于FOSU​​serBundle会自动将新用户转发到需要用户登录的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可用于告知新用户他们的帐户已创建但已停用,然后您的团队成员会联系他们以完成此过程。