1

我使用 FOSUserBundle 来创建我的 Symfony 项目的成员区域。在后台,我想在不知道密码的情况下修改用户。怎么做?

4

2 回答 2

1

FOSUserBundleUser实体与任何其他实体一样工作。你只需要两件事:

控制器动作

创建您的AdminController或任何您想调用的名称。

class AdminController extends Controller 
{

    /**
    * This action is responsible for the editing of existing user
    *
    * @param Request $request The Symfony2 Request Object
    * @param User    $user    The user that should be edited
    *
    * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
    *
    * @Template()
    * @Route("/edit/{slug}", name="user_edit")
    * @Secure(roles="ROLE_ADMIN")
    * @ParamConverter("user", class="YourBundle:User")
    */
    public function editAction(Request $request, User $user)
    {
        $form = $this->createForm(
            new UserType(),
            $user
        );

        if ($request->getMethod() === 'POST') {
            $form->submit($this->getRequest());
            if ($form->isValid()) {

                $manager = $this->getDoctrine()->getManager();
                $manager->persist($event); 
                $manager->flush();

                $this->get('session')->getFlashBag()->add(
                    'success',
                    'The user has been updated successfully!'
                );

                // generate redirect somewhere... & return
            }
        }

        return array(
            'form' => $form->createView(),
            'user' => $user
        );
    }

用户的表单类型

type应该是这样的:

class UserType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder->add(
            'firstname',
            'text',
            array(
            'label' => 'Firstname',
            'required' => true,
            )
        );

        $builder->add(
            'lastname',
            'textarea',
            array(
            'label' => 'Lastname',
            'required' => true,
            )
        );

        // add more fields here if you want to....
    }

    public function getName()
    {
        return 'user';
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
            array(
            'data_class' => 'YourName\YourBundle\Entity\User'
            )
        );
    }

}

这使您可以在不知道密码的情况下完全控制数据库记录。另请查看文档:

最后但同样重要的是:不要忘记包含use语句并更改所有@Route定义和其他路径。

于 2013-09-26T08:17:20.470 回答
1

永远不要询问当前密码, In \Form\Type\RegistrationFormType.php,从构建器中删除->add('plainPassword',...

于 2017-05-18T21:32:17.803 回答