FOSUserBundle 重置密码:奇怪的行为
FOSUserBundle reset password: weird behaviour
我正在尝试制作我自己的表单以允许用户编辑他的个人资料。我成功地将我的字段添加到 FosUserBundle
原始字段,但我有一个奇怪的行为。
我的用户只能修改一次密码!!如果我在 2 秒后(例如断开连接然后登录后)重试从表单更改它,它不起作用:除密码外,每个字段值都可以更改。
编辑:新信息,仅当我更改表单中的另一个字段时才会保存新密码。
你有什么想法吗?
这是我的代码:
UserType.php
在 src/UserBundle/Form
<?php
namespace MDB\UserBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class UserType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('name')
->add('nbEtoile')
->add('dateInscription')
->add('dateNaissance')
->add('adresse', new \MDB\AdresseBundle\Form\AdresseType())
->add('save', 'submit')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'MDB\UserBundle\Entity\User'
));
}
/**
* @return string
*/
public function getName() {
return 'mdb_userbundle_user';
}
public function getParent()
{
return 'fos_user_registration';
}
}
MDB/src/UserBundle/Resources/config/service.yml
services:
mdb_user.registration.form.type:
class: MDB\UserBundle\Form\Type\RegistrationFormType
tags:
- { name: form.type, alias: mdb_user_registration }
mdb_user.registration_complet:
class: MDB\UserBundle\EventListener\RegistrationConfirmListener
arguments: ["@router"]
tags:
- { name: kernel.event_subscriber }
mdb_user.user.form.type:
class: MDB\UserBundle\Form\Type\UserType
tags:
- { name: form.type, alias: mdb_userbundle_user }
app/config/config.yml
fos_user:
db_driver: orm # Le type de BDD à utiliser, nous utilisons l'ORM Doctrine depuis le début
firewall_name: main # Le nom du firewall derrière lequel on utilisera ces utilisateurs
user_class: MDB\UserBundle\Entity\User
registration:
form:
type: mdb_user_registration
type: mdb_userbundle_user
UserController.php
public function editAction(Request $request) {
if (!$this->get('security.context')->isGranted('ROLE_USER')) {
$session = $request->getSession();
$session->getFlashBag()->add('errorRole', 'Vous devez être connecté pour accéder à cette page');
return $this->render('MDBPlatformBundle:Default:index.html.twig');
}
$user = $this->get('security.context')->getToken()->getUser();
$form = $this->createForm(new UserEditType(), $user);
if ($form->handleRequest($request)->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->flush();
$request->getSession()->getFlashBag()->add('notice', 'Profil bien modifiée.');
return $this->redirect($this->generateUrl('mdb_platform_homepage'));
}
return $this->render('MDBUserBundle::editForm.html.twig', array(
'form' => $form->createView()
));
}
一切正常,除了这一点。
好的,我发现了一个小窍门。如果用户实体没有变化,我似乎无法保存密码。所以我创建了一个日期类型字段“dateOfProfilEdit
”,并在每次保存表单时在我的控制器中实现它。
希望对您有所帮助
我正在尝试制作我自己的表单以允许用户编辑他的个人资料。我成功地将我的字段添加到 FosUserBundle
原始字段,但我有一个奇怪的行为。
我的用户只能修改一次密码!!如果我在 2 秒后(例如断开连接然后登录后)重试从表单更改它,它不起作用:除密码外,每个字段值都可以更改。
编辑:新信息,仅当我更改表单中的另一个字段时才会保存新密码。
你有什么想法吗?
这是我的代码:
UserType.php
在 src/UserBundle/Form
<?php
namespace MDB\UserBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class UserType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('name')
->add('nbEtoile')
->add('dateInscription')
->add('dateNaissance')
->add('adresse', new \MDB\AdresseBundle\Form\AdresseType())
->add('save', 'submit')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'MDB\UserBundle\Entity\User'
));
}
/**
* @return string
*/
public function getName() {
return 'mdb_userbundle_user';
}
public function getParent()
{
return 'fos_user_registration';
}
}
MDB/src/UserBundle/Resources/config/service.yml
services:
mdb_user.registration.form.type:
class: MDB\UserBundle\Form\Type\RegistrationFormType
tags:
- { name: form.type, alias: mdb_user_registration }
mdb_user.registration_complet:
class: MDB\UserBundle\EventListener\RegistrationConfirmListener
arguments: ["@router"]
tags:
- { name: kernel.event_subscriber }
mdb_user.user.form.type:
class: MDB\UserBundle\Form\Type\UserType
tags:
- { name: form.type, alias: mdb_userbundle_user }
app/config/config.yml
fos_user:
db_driver: orm # Le type de BDD à utiliser, nous utilisons l'ORM Doctrine depuis le début
firewall_name: main # Le nom du firewall derrière lequel on utilisera ces utilisateurs
user_class: MDB\UserBundle\Entity\User
registration:
form:
type: mdb_user_registration
type: mdb_userbundle_user
UserController.php
public function editAction(Request $request) {
if (!$this->get('security.context')->isGranted('ROLE_USER')) {
$session = $request->getSession();
$session->getFlashBag()->add('errorRole', 'Vous devez être connecté pour accéder à cette page');
return $this->render('MDBPlatformBundle:Default:index.html.twig');
}
$user = $this->get('security.context')->getToken()->getUser();
$form = $this->createForm(new UserEditType(), $user);
if ($form->handleRequest($request)->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->flush();
$request->getSession()->getFlashBag()->add('notice', 'Profil bien modifiée.');
return $this->redirect($this->generateUrl('mdb_platform_homepage'));
}
return $this->render('MDBUserBundle::editForm.html.twig', array(
'form' => $form->createView()
));
}
一切正常,除了这一点。
好的,我发现了一个小窍门。如果用户实体没有变化,我似乎无法保存密码。所以我创建了一个日期类型字段“dateOfProfilEdit
”,并在每次保存表单时在我的控制器中实现它。
希望对您有所帮助