我正在尝试创建自己的表单以允许用户编辑他的个人资料。我成功地在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()
));
}
除此之外,一切都很好。
答案 0 :(得分:1)
好的,我找到了一个小黑客。如果用户实体没有变化,我似乎无法保存密码。所以我创建了一个日期类型字段&#34; dateOfProfilEdit
&#34;并在每次保存表单时在我的控制器中实现它。
希望它会有所帮助