删除FOSUserBundle管理员表单中的当前密码检查

时间:2013-09-25 16:02:15

标签: symfony fosuserbundle

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

2 个答案:

答案 0 :(得分:1)

FOSUserBundle User实体与任何其他实体一样。你只需要两件事:

控制器操作

创建您的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定义和其他路径。

答案 1 :(得分:1)

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