FOSUserBundle重置密码:奇怪的行为

时间:2015-02-02 20:47:00

标签: symfony bundle fosuserbundle

我正在尝试创建自己的表单以允许用户编辑他的个人资料。我成功地在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()
        ));
    }

除此之外,一切都很好。

1 个答案:

答案 0 :(得分:1)

好的,我找到了一个小黑客。如果用户实体没有变化,我似乎无法保存密码。所以我创建了一个日期类型字段&#34; dateOfProfilEdit&#34;并在每次保存表单时在我的控制器中实现它。

希望它会有所帮助