我使用 FOSUserBundle 来创建我的 Symfony 项目的成员区域。在后台,我想在不知道密码的情况下修改用户。怎么做?
问问题
1681 次
2 回答
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
定义和其他路径。
于 2013-09-26T08:17:20.470 回答
1
永远不要询问当前密码, In \Form\Type\RegistrationFormType.php
,从构建器中删除->add('plainPassword',...
于 2017-05-18T21:32:17.803 回答