Symfony 取消订阅FOSUserBundle中的用户
我正在用symfony2重新设计一个网站,用户必须能够取消订阅 当他们这样做时,出于数据库完整性的原因,我们必须取消激活他们的帐户,而不是完全删除它。我们还必须在一定时间内跟踪他们的个人信息,如电子邮件地址(法律义务) 我使用的是FOSUserBundle,我最初认为停用未订阅用户帐户的简单方法是将用户属性“enabled”设置为false 但当用户未启用时,如果他尝试使用相同的电子邮件地址再次注册,他会看到:“电子邮件已被使用”。我希望他可以再次注册并创建一个新帐户(或重新激活旧帐户) 有办法做到这一点吗? 是否有处理FOSUserBundle退订的最佳实践Symfony 取消订阅FOSUserBundle中的用户,symfony,fosuserbundle,Symfony,Fosuserbundle,我正在用symfony2重新设计一个网站,用户必须能够取消订阅 当他们这样做时,出于数据库完整性的原因,我们必须取消激活他们的帐户,而不是完全删除它。我们还必须在一定时间内跟踪他们的个人信息,如电子邮件地址(法律义务) 我使用的是FOSUserBundle,我最初认为停用未订阅用户帐户的简单方法是将用户属性“enabled”设置为false 但当用户未启用时,如果他尝试使用相同的电子邮件地址再次注册,他会看到:“电子邮件已被使用”。我希望他可以再次注册并创建一个新帐户(或重新激活旧帐户) 有办法
感谢您的帮助。您需要使用
easyextendbundle
覆盖主注册过程,您可以查看以下url上的文档:
然后在扩展控制器中,您必须创建一个新操作来激活或停用您的用户,此操作必须在安全规则中公开
在此方法中,您可以使用服务激活或停用用户:
fos:user:停用
停用用户
fos:user:激活
激活用户
您可以从前面的帖子中得到启发:另一种可能是使用属性
$subscribed
更新您的用户类,如下所示:
/**
* @ORM\Column(name="subscribed", type="boolean")
*/
protected $subscribed;
public function setSubscribed($subscribed)
{
$this->subscribed = $subscribed;
}
public function isSubscribed($)
{
return $this->subscribed;
}
public function changeSubscribed()
{
$this->subscribed = !$this->subscribed;
}
这避免了电子邮件地址冲突,而无需添加另一个第三方包
编辑(请注意,也可设置上述方法)
在您的bundle\EventListener中
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class RegistrationListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
);
}
/**
* Persist organization on staff registration success.
*
* @param \FOS\UserBundle\Event\FormEvent $event
*/
public function onRegistrationSuccess(FormEvent $event)
{
/** @var $user \FOS\UserBundle\Model\UserInterface */
$user = $event->getForm()->getData();
$user->setSubscribed(true);
}
}
另外,添加到app/config/services.yml:
your_bundle.regisration.listener:
class: YourBundle\EventListener\RegistrationListener
tags:
- { name: kernel.event_subscriber }
谢谢你的回答。但这不是我的问题,我知道如何停用用户,这是我已经做过的:我在前端创建了一个取消订阅的操作,它停用(enabled=false)用户。我更关心的是,一个停用的用户并不像一个未订阅的用户;主要是,他以后不能再注册了。所以我的问题是:你能授权一个停用的用户再次注册吗?如何授权?你必须重写整个注册逻辑吗?谢谢你的回答。如何将此新属性与用户权限(如连接、注册等)链接。。。您是否重写FOSUserBundle控制器?不确定“连接”是什么意思。对于register,您可以添加注册侦听器,以便在注册成功时订阅用户。我将在回答中添加一个示例。
isSubscribed()
方法被错误删除,现在已恢复。