我只是想讓用戶註冊。他沒有收到任何電子郵件。當然我可以這樣做:Symfony2 FOSUserBundle在註冊時同時禁用了郵件確認和用戶
registration:
confirmation:
enabled: false
但是,這使得用戶自動註冊沒有確認。
我想這樣做,當用戶註冊時,他必須等待,直到管理員啓用用戶。這意味着我需要使用戶在默認情況下被禁用..
我無法找到任何有關信息。有人可以幫忙嗎?
我試過,但它沒有工作:
user.php的
public function __construct()
{
parent::__construct();
// your own logic
$this->enabled = false;
//and
$this->setEnabled(false);
}
PS加上FOS我使用的SonataUserBundle ..這是我的registerAction:
public function registerAction()
{
$user = $this->container->get('security.context')->getToken()->getUser();
if ($user instanceof UserInterface) {
$this->container->get('session')->getFlashBag()->set('sonata_user_error', 'sonata_user_already_authenticated');
$url = $this->container->get('router')->generate('sonata_user_profile_show');
return new RedirectResponse($url);
}
$form = $this->container->get('sonata.user.registration.form');
$formHandler = $this->container->get('sonata.user.registration.form.handler');
$confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled');
$process = $formHandler->process($confirmationEnabled);
if ($process) {
$user = $form->getData();
$authUser = false;
if ($confirmationEnabled) {
$this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail());
$url = $this->container->get('router')->generate('fos_user_registration_check_email');
} else {
$authUser = true;
$route = $this->container->get('session')->get('sonata_basket_delivery_redirect');
if (null !== $route) {
$this->container->get('session')->remove('sonata_basket_delivery_redirect');
$url = $this->container->get('router')->generate($route);
} else {
$url = $this->container->get('session')->get('sonata_user_redirect_url');
}
}
$this->setFlash('fos_user_success', 'registration.flash.user_created');
$response = new RedirectResponse($url);
if ($authUser) {
$this->authenticateUser($user, $response);
}
return $response;
}
$this->container->get('session')->set('sonata_user_redirect_url', $this->container->get('request')->headers->get('referer'));
return $this->container->get('templating')->renderResponse('MpShopBundle:Frontend:registration.html.'.$this->getEngine(), array(
'form' => $form->createView(),
));
}
UPDATE
I ca ñ使這項工作是通過啓用電子郵件確認,但不發送電子郵件給用戶。這樣用戶不能確認他的賬戶,並且必須等待管理員啓用它。但我不想有這樣的問題..應該有辦法通常禁用它們。
FIXED
我終於想通了。你所要做的只是在代碼中的registerAction中檢查是否需要電子郵件確認,在else語句中將其設置爲啓用並更新用戶。如果你不更新它不會工作。
if ($process) {
$user = $form->getData();
$authUser = false;
if ($confirmationEnabled) {
$this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail());
$url = $this->container->get('router')->generate('fos_user_registration_check_email');
} else {
$user->setEnabled(false);
$userManager = $this->container->get('fos_user.user_manager');
$userManager->updateUser($user);
$route = $this->container->get('session')->get('sonata_basket_delivery_redirect');
if (null !== $route) {
$this->container->get('session')->remove('sonata_basket_delivery_redirect');
$url = $this->container->get('router')->generate($route);
} else {
$url = $this->container->get('session')->get('sonata_user_redirect_url');
}
}
嘿謝謝你的回覆。不幸的是我已經試過了。我忘了提及我也在使用SonataUserBundle。我已經使用registrationAction更新了我的答案。看看它。 – Dominykas55
啊......好吧,我從來沒有使用過'SonataUserBundle',所以我不確定在這種情況下問題是什麼。對於那個很抱歉。 –