我使用FOSUserBundle来创建Symfony项目的成员区域。 在后台办公室,我想在不知道密码的情况下修改用户。 怎么做?
答案 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',...