Я столкнулся с проблемой, подобной той, которая была опубликована Вот но так как у меня нет 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()
);
}
Продолжая, как мне избежать запроса пароля каждый раз, когда я хочу обновить профиль пользователя, любую помощь?
Таким образом, похоже, что проблема связана с тем, что вы позволяете 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';
}
}
И тогда ваш контроллер останется достаточно схожим, за исключением того, что вам не понадобится отдельная фабрика форм и вы будете использовать ваш 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()
);
}
Не уверен в деталях вашего вида и т. Д., Но вам просто нужно визуализировать форму, и все должно быть золотым!
Надеюсь, у меня не тот конец палки.
Других решений пока нет …