我遇到的问题就像发布here的那个问题,但由于我没有UserFormType
,我不知道如何解决这个问题。每次我(以管理员身份登录并具有正确的权限)将更改用户个人资料字段(例如电子邮件)时,我们的想法是不要求密码。这是我的代码:
public function editAction(Request $request, $id)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('UserBundle:User')->find($id);
/** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
$formFactory = $this->container->get('fos_user.profile.form.factory');
$form = $formFactory->createForm();
$form->setData($user);
if ('POST' === $request->getMethod())
{
$form->handleRequest($request);
if ($form->isValid())
{
/** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
$userManager = $this->container->get('fos_user.user_manager');
$userManager->updateUser($user);
}
}
return array(
'form' => $form->createView(),
'id' => $user->getId()
);
}
恢复,每次我想更新用户个人资料时,如何避免要求输入密码?有什么帮助吗?
答案 0 :(得分:1)
所以看起来这个问题源于你让FOSUserBundle为你做所有事情的事实,这是公平的,但却更难调整行为。你可以覆盖各种各样的东西来改变它的工作方式,但我自己的应用程序根本没有使用FOSUserBundle来管理用户注册后,你可以简单地创建你自己的简单表单来做到这一点,例如:
class UserType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', 'text')
->add('email', 'email')
->add('save', 'submit');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Your\Bundle\Entity\User',
));
}
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'user';
}
}
然后您的控制器将保持相当类似,除非不需要单独的Form Factory并使用您的UserType:
public function editAction(Request $request, $id)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('UserBundle:User')->find($id);
/** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
//Don't need this!
//$formFactory = $this->container->get('fos_user.profile.form.factory');
//$form = $formFactory->createForm();
//$form->setData($user);
$form = $this->createForm(new UserType(), $user);
if ('POST' === $request->getMethod())
{
$form->handleRequest($request);
if ($form->isValid())
{
/** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
$userManager = $this->container->get('fos_user.user_manager');
$userManager->updateUser($user);
}
}
return array(
'form' => $form->createView(),
'id' => $user->getId()
);
}
不确定您的View等细节,但您只需要渲染表单,事情应该是金色的!
希望我没有错误的结局。