我在我的Symfony应用程序上覆盖了表单,但是我肯定在此过程中跳过了一些东西,但我不知道是什么。
基本上,一切都可以正常工作,看起来像我想要的那样,但是一旦我故意生成错误(即:将电子邮件地址更改为无效的电子邮件地址(,我就会重定向到孤独的形式模板,而不是重新加载在我的页面上带有生成并显示问题的页面。
我尝试替换这一行:
return $this->render('@FOSUser/Profile/edit.html.twig', array(
'form' => $form->createView(),
));
从profilecontroller那里,我认为这是原因,但是我尝试错误并在尝试时会遇到错误。
在显示提交表单的错误时,可以使用包含其他表格的自定义个人资料页面的正确语法是什么?
我假设您已经被自己的用户围栏覆盖了fosuserbundle(如官方文档中所述(。然后,您必须在自己的ProfileController
中修改函数editAction()
,然后编写UserBundle配置文件的TWIG模板(在下面的代码中查看我的最后一个评论(:
<?php
// src/UserBundle/Controller/ProfileController.php
namespace UserBundleController;
// use statements
class ProfileController extends Controller
{
/**
* Edit the user.
*
* @param Request $request
*
* @return Response
*/
public function editAction(Request $request)
{
$user = $this->getUser();
if (!is_object($user) || !$user instanceof UserInterface) {
throw new AccessDeniedException('This user does not have access to this section.');
}
/** @var $dispatcher EventDispatcherInterface */
$dispatcher = $this->get('event_dispatcher');
$event = new GetResponseUserEvent($user, $request);
$dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_INITIALIZE, $event);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
/** @var $formFactory FactoryInterface */
$formFactory = $this->get('fos_user.profile.form.factory');
$form = $formFactory->createForm();
$form->setData($user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/** @var $userManager UserManagerInterface */
$userManager = $this->get('fos_user.user_manager');
$event = new FormEvent($form, $request);
$dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_SUCCESS, $event);
$userManager->updateUser($user);
if (null === $response = $event->getResponse()) {
$url = $this->generateUrl('fos_user_profile_show');
$response = new RedirectResponse($url);
}
$dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_COMPLETED, new FilterUserResponseEvent($user, $request, $response));
return $response;
}
// Change the following line, with your custom profile twig template
//return $this->render('@FOSUser/Profile/edit.html.twig', array(
return $this->render('UserBundle:Profile:edit.html.twig', array(
'form' => $form->createView(),
));
}
}